java - Jackson 动态属性名称

标签 java json jackson

我想序列化一个对象,以便根据字段的类型对其中一个字段进行不同的命名。例如:

public class Response {
    private Status status;
    private String error;
    private Object data;
        [ getters, setters ]
    }

在这里,我希望将字段 data 序列化为 data.getClass.getName() 之类的东西,而不是总是有一个名为 data< 的字段 根据情况包含不同的类型。

我如何使用 Jackson 实现这样的技巧?

最佳答案

我有一个使用 @JsonAnyGetter 注释的更简单的解决方案,它就像一个魅力。

import java.util.Collections;
import java.util.Map;

public class Response {
    private Status status;
    private String error;

    @JsonIgnore
    private Object data;

    [getters, setters]

    @JsonAnyGetter
    public Map<String, Object> any() {
        //add the custom name here
        //use full HashMap if you need more than one property
        return Collections.singletonMap(data.getClass().getName(), data);
    }
}

不需要包装器,不需要自定义序列化器。

关于java - Jackson 动态属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12134231/

相关文章:

java - jackson :使用 [Ljava.lang.Double 的 InvalidDefinitionException

java - java中如何替换字符串?

java - 如何在java中获取非常长的输入

java - setter需要更新对象并返回一些JAVA的东西

javascript - 从 geojson 获取最大值和最小值

jquery - 为什么一个数字是有效的 json?

java - Regex/javax.validation 帮助 -- 验证是否存在空白 -- Java

jquery - 未在 Jquery.GetJSON 中获取数据

java - 带有 jackson-datatype-jsr310 的 Spring 配置中的 RESTful 服务

java - jackson 冲突的属性(property)和 setter/getter 定义