【发布时间】:2021-09-17 09:58:47
【问题描述】:
虽然这个问题听起来很简单,但我在一个非常简单的 bean 上也遇到了这个异常:
@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.MismatchedInputException: Cannot construct instance of "org.example.app.Foo$Error" (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('message')
应用程序:
@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 文件位于类路径中。
我尝试过的:
-
Error类上的显式@AllArgsConstructorLombok 注释 - 从
int code切换到Integer code(可空类型) - 将
Error类移出Foo(非内部类)
【问题讨论】:
-
这不是有效的 JSON。
message应该在一个对象中。 -
您的 JSON 无效,除非您在此处复制时打错字..
-
天啊!我不敢相信。谢谢你们!
标签: java json spring deserialization lombok