【问题标题】:MappingJackson2HttpMessageConverter fails to convert json to entityMappingJackson2HttpMessageConverter 无法将 json 转换为实体
【发布时间】:2021-11-23 08:12:02
【问题描述】:

我正在使用弹簧靴。休息模板。映射Jackson2HttpMessageConverter

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"
      } ]
    }

存在实体设​​置器/获取器

    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;
    }

【问题讨论】:

    标签: spring-boot resttemplate jackson2


    【解决方案1】:

    我认为这是因为 JSON 键是 Snake Case,但 Camel Case 中的类字段名称。您可以通过三种方式解决此问题,

    1. 重命名字段名称以匹配 JSON 对象
    2. 使用@JsonProperty 注释对setter 方法进行注释。
    3. @JsonNaming注解对类进行注解

    方法二

    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;
        }
    }
    

    【讨论】:

    • 我没有意识到我在其中一个配置中自定义了 MappingJackson2HttpMessageConverter。
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多