MappingJackson2HttpMessageConverter 无法将 json 转换为实体
MappingJackson2HttpMessageConverter fails to convert json to entity
我正在使用 spring 启动。休息模板。 MappingJackson2HttpMessageConverter
MappingJackson2HttpMessageConverter 无法将以下 json 转换为实体。它不会抛出任何错误。我正在尝试调试相同的内容。 Json 有什么问题吗?以及如何为 MappingJackson2HttpMessageConverter
启用失败
{
"id" : 1,
"context" : "MYC",
"my_date" : "2021-06-20",
"files" : [ {
"file_name" : "here.txt",
"created_time" : "2021-06-20T12:00:00+02:00"
} ]
}
实体setter/getter存在
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
}
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
我认为这是因为 JSON 键是 Snake Case
但 class 字段名称在 Camel Case
中。您可以通过三种方式解决此问题,
- 重命名字段名称以匹配 JSON 对象
- 使用
@JsonProperty
注释注释 setter 方法。
- 用
@JsonNaming
注释 class 注释
方法二
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
@JsonProperty("my_date")
public void setMyDate(LocalDate myDate) {
this.myDate = myDate;
}
}
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
@JsonProperty("file_name")
public String getFileName() {
return fileName;
}
@JsonProperty("created_time")
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
方法三
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
}
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
我正在使用 spring 启动。休息模板。 MappingJackson2HttpMessageConverter
MappingJackson2HttpMessageConverter 无法将以下 json 转换为实体。它不会抛出任何错误。我正在尝试调试相同的内容。 Json 有什么问题吗?以及如何为 MappingJackson2HttpMessageConverter
启用失败 {
"id" : 1,
"context" : "MYC",
"my_date" : "2021-06-20",
"files" : [ {
"file_name" : "here.txt",
"created_time" : "2021-06-20T12:00:00+02:00"
} ]
}
实体setter/getter存在
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
}
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
我认为这是因为 JSON 键是 Snake Case
但 class 字段名称在 Camel Case
中。您可以通过三种方式解决此问题,
- 重命名字段名称以匹配 JSON 对象
- 使用
@JsonProperty
注释注释 setter 方法。 - 用
@JsonNaming
注释 class 注释
方法二
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
@JsonProperty("my_date")
public void setMyDate(LocalDate myDate) {
this.myDate = myDate;
}
}
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
@JsonProperty("file_name")
public String getFileName() {
return fileName;
}
@JsonProperty("created_time")
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
方法三
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class Details{
private Long id;
private LocalDate myDate;
private ContextEnum context;
private List<FileInfo> files;
}
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class FileInfo {
private String fileName;
private OffsetDateTime createdTime;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}