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 中。您可以通过三种方式解决此问题,

  1. 重命名字段名称以匹配 JSON 对象
  2. 使用 @JsonProperty 注释注释 setter 方法。
  3. @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;
    }
}