#spring-boot #resttemplate #jackson2
Вопрос:
Я использую пружинный ботинок. Остальная табличка. Сопоставление jackson2httpmessageconverter
MappingJackson2HttpMessageConverter не удается преобразовать следующий json в сущность. Это не выдает никаких ошибок. Я пытаюсь отладить то же самое. Что не так с Json ? и как я могу включить сбой для сопоставления jackson2httpmessageconverter
{
"id" : 1,
"context" : "MYC",
"my_date" : "2021-06-20",
"files" : [ {
"file_name" : "here.txt",
"created_time" : "2021-06-20T12:00:00 02:00"
} ]
}
Сеттер/получатель сущностей присутствует
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;
}
Ответ №1:
Я предполагаю, что это из-за ключа JSON, в котором есть Snake Case
только имена полей класса Camel Case
. Вы можете исправить это тремя способами,
- Переименуйте имена полей в соответствии с объектом JSON
- Аннотируйте методы
@JsonProperty
настройки аннотациями. - Аннотировать классы с
@JsonNaming
помощью аннотаций
Способ 2
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;
}
}
Способ 3
@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;
}
}
Комментарии:
1. Я не осознавал, что настраивал MappingJackson2HttpMessageConverter в одной из своих конфигураций.