Spring Boot Jackson 通用数据类型序列化

Posted

技术标签:

【中文标题】Spring Boot Jackson 通用数据类型序列化【英文标题】:Springboot Jackson Generic data type serialize 【发布时间】:2018-06-15 04:43:51 【问题描述】:

我有课

public class ResponseWrapper<T> 

    private T mObject;

    /**
     * @return the mObject
     */
    public T getmObject() 
        return mObject;
    

    /**
     * @param mObject the mObject to set
     */
    public void setData(T mObject) 
        this.mObject = mObject;
    

T 是我设置的泛型类型对象。所以我会像

一样初始化它

ResponseWrapper<Dog> responseWrapper = new ResponseWrapper(); responseWrapper.setData(new Dog())

在 Dog 类中,我使用 @JsonRootName("dog") 对其进行了注释

我的问题是,我希望 JSON 输出应该类似于 ResponseWrapper


        "dog": 
                 "dogId": 19
               

但我的 JSON 就像


        "mObject": 
                 "dogId": 19
               

它采用变量名的名称。我希望杰克逊采用 @JsonRootName 值而不是变量名。但我想我在这里遗漏了一些东西。

【问题讨论】:

你有UNWRAP_ROOT_VALUE set 吗? 我有这个设置 spring.jackson.deserialization.unwrap-root-value=true。 【参考方案1】:

使用@JsonPoperty

public class ResponseWrapper<T> 
    @JsonProperty("dog")
    private T mObject;

    /**
     * @return the mObject
     */
    public T getmObject() 
        return mObject;
    

    /**
     * @param mObject the mObject to set
     */
    public void setData(T mObject) 
        this.mObject = mObject;
    

【讨论】:

如果我把@JsonProperty 我只会得到“狗”作为根节点。

以上是关于Spring Boot Jackson 通用数据类型序列化的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 未使用 Jackson Kotlin 插件

Spring boot Jackson Json Serialization for List 实现类(PagedList)

Spring Boot Jackson ResponseEntity 找不到类的序列化程序

使用 Gson/Jackson 和 Spring Boot 重新创建没有字段属性的 DTO 类,而不是使其为空

Spring boot + Jackson + LocalDateTime:日期解析不正确

Jackson Object Mapper 在提供扩展配置时不工作,但在 Spring Boot 中提供类级别/字段级别注释时工作