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

Jackson:"(尽管至少有一个Creator存在):没有字符串参数构造函数/工厂方法来反序列化"

干子瑜
2023-03-14

虽然这个问题听起来很简单,但我也在一个非常简单的bean上遇到了这个异常:

java prettyprint-override">@Data
public class Foo {
  private List<Error> errors;

  @Data
  public static class Error {
    private int code;
    private String message;
  }
}

JSON:

{
  "errors": [
    "message": "bla bla bla"
  ]
}

异常:com.fasterxml.jackson.databind.exc.MismatchedInputExcture:无法构造org.example.app.Foo$Error的实例(尽管至少存在一个Creator):没有String-参数构造函数/工厂方法从String值反序列化('消息')

应用程序:

@SpringBootApplication
public class Application {
  public static void main(String[] args) throws Exception {
    ApplicationContext context = SpringApplication.run(Application.class, args);
    ObjectMapper objectMapper = context.getBean(ObjectMapper.class);
    Resource resource = new ClassPathResource("request.json");
    try (InputStream stream = resource.getInputStream()) {
        Foo foo = objectMapper.readValue(stream, Foo.class);
        System.out.println(foo);
    }
  }
}

JSON文件位于类路径上。

我尝试过的:

  1. 显式@allargsconstuctorLombok注释关于Errorclass

共有1个答案

韦高阳
2023-03-14

考虑使用@ Builder进行@ JSONSORID注释

https://projectlombok.org/features/experimental/Jacksonized

修复您的json对象以及它是畸形的。“错误”是使用对象数组,所以你应该有这样的东西:

{
    "errors": [{
        "message": "bla bla bla"
    }]
}
 类似资料: