MappingJackson2HttpMessageConverter не удается преобразовать json в сущность

#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 . Вы можете исправить это тремя способами,

  1. Переименуйте имена полей в соответствии с объектом JSON
  2. Аннотируйте методы @JsonProperty настройки аннотациями.
  3. Аннотировать классы с @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 в одной из своих конфигураций.