当前位置: 首页 > 知识库问答 >
问题:

找不到适合type[Simple type, classjava.time.LocalDateTime]的构造函数

丁绪
2023-03-14

我的程序是用Java8写的,当我使用LocalDateTime的类型时,它会给我以下错误:

没有为类型[simple type,class java.time.LocalDateTime]找到合适的构造函数:无法从JSON对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)
在[来源:[B@5976fe6f; 行:1,列:80](通过引用链:com.boot.framwork.entity.UserInfo[“accessTime”])

实体是这样的:

public class UserInfo implements Serializable {

private static final long serialVersionUID = 1L;

private String username;

private int age;

private LocalDateTime accessTime;

private Date time;

private List<String> list = new ArrayList<String>();

private boolean isMarried;

public UserInfo() {

}

当我不使用LocalDateTime时,它起作用了

共有2个答案

平山
2023-03-14

我也遇到了同样的问题,需要将MyCustomClass正确地引入和退出Lambda函数,这样它就可以在Step函数中通过我的状态机

我用下面的帖子想出了最好的答案:

带有jackson注释的AWS Lambda json反序列化

这是我的代码,为我工作:

import java.io.InputStream;
import java.io.OutputStream;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

public class StaticSearchPagingLambdaFunctionHandler implements RequestStreamHandler {

    LambdaLogger logger = null;
    MyCustomClass myCustomClass = null;

    // Register the JavaTimeModule for LocalDate conversion
    ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());

    @Override
    public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) {    

            myCustomClass = objectMapper.readValue(inputStream, MyCustomClass .class);

            // ...
            // Do stuff with myCustomClass
            // ...

            objectMapper.writeValue(outputStream, myCustomClass);
    }
}

尽管JSON字符串在ObjectMapper写入OutPutStream时会以不同的方式打印出来,但当下一个lambda函数在执行步骤函数时接收它时,它仍然会正确地转换为LocalDate

确保在MyCustomClass中您的toString()方法正确打印。我的toString()方法如下所示:

import java.time.LocalDate;

import org.json.JSONObject;

public class SimpleSearch {

    private LocalDate startDate;
    private LocalDate endDate;

    // ...
    // Getters and Setters for the LocalDate variables
    // ...

    @Override
    public String toString() {
        return new JSONObject(this).toString();
    }

    public SimpleSearch() {}
}

然后,当JSON打印输出被发送到lambda时,它总是这样,而不是其他疯狂的Jackson格式:

{
    "startDate": "2018-11-01",
    "endDate": "2018-11-16"
}

我使用的一些Maven依赖项:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.7</version>
</dependency>

希望AWS能将Jackson转换修复为JSON之间的相互转换,这样我们就不必再求助于这些自定义转换了。

郑宏朗
2023-03-14

在我看来, that you don't have a JSR310 support.杰克逊需要一些额外的配置,以便能够识别Java8 Date

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.7.4</version>
</dependency>

或者如果你用梯度

compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4'

由于您使用SpringBoot,这应该就足够了,因此不需要手动创建JSR310Module类型的Bean。

 类似资料:
  • 问题内容: 我正在实现他们文档中提供的firebase示例。我遇到此错误: com.fasterxml.jackson.databind.JsonMappingException:没有为类型[简单类型,类com.XYZ。$ BlogPost]找到合适的构造函数:无法从JSON对象实例化(需要添加/启用类型信息吗?) 这是我的代码: 我在同一件事上经历了很多问题,说要包含反序列化JSON所需的空构造

  • 问题内容: 我是Java的新手,正在尝试为Minecraft制作一个mod,但我不知道如何解决此错误: 这是我的代码: 这是怎么回事,我正在尝试使字符串“ Username”重定向到另一个类。 问题答案: Java编译器告诉您不能构造对象,因为您对构造函数的调用与任何已知的构造函数都不匹配。 具体来说,编译器发现了两个构造函数: 但您致电给: 都不匹配。

  • 我在运行代码时得到了这个错误,我在跟踪treehouse Build a blog reader android应用程序,现在我得到了这个错误 错误:(120,52)错误:找不到适合ArrayAdapter(MainListActivity.GetBlogPostStask,int,String[])的构造函数ArrayAdapter.ArrayAdapter(Context,int,int)不适

  • 从javase api 8开始,是不推荐的。因此,动态生成是首选的导出对象方式,如下所示: null 我的问题是,当出现在JavaE8 api中时,为什么编译器会出错?

  • 我对编程很陌生,一直在尝试为学校项目的片段添加一个列表视图+arrayadapter。已经提到了这个问题,但没有用。https://stackoverflow.com/questions/32350275/no-application-constructor-found-for-ArrayAdapterMainListActivity-getBlogPostStask#= }