Java 将一个字段输出到多个json字段

Java 将一个字段输出到多个json字段,java,json,serialization,jackson,Java,Json,Serialization,Jackson,有没有一种方法可以使用Jackson注释将have给定的字段序列化为2个json字段 与将多个json字段反序列化为一个字段的@jsonaas相反 乙二醇 序列化为: { "field1" : "xyz", "field2" : "xyz" } 是否有类似于@SomeAnnotation的注释 -- 注意:这不是一个“应该”我做这件事(这是一个强制要求),而是一个“如何”我做这件事(优雅)。一个简单的解决方案可能是为field1添加两个getter: class Foo {

有没有一种方法可以使用Jackson注释将have给定的字段序列化为2个json字段

与将多个json字段反序列化为一个字段的
@jsonaas
相反

乙二醇

序列化为:

{
    "field1" : "xyz",
    "field2" : "xyz"
}
是否有类似于
@SomeAnnotation
的注释

--


注意:这不是一个“应该”我做这件事(这是一个强制要求),而是一个“如何”我做这件事(优雅)。

一个简单的解决方案可能是为
field1
添加两个getter:

class Foo {
    private String field1 = "blah";

    public String getField1() {
        return field1;
    }

    public String getField2() {
        return field1;
    }
}
Jackson将按照javabeans命名约定为每个getter创建一个字段:

{"field1":"blah","field2":"blah"}
另一种选择是
@com.fasterxml.jackson.annotation.JsonAnyGetter
,它可以为您提供更大的灵活性:

class Foo {
    private String field1 = "blah";

    public String getField1() {
        return field1;
    }

    @JsonAnyGetter
    public Map<String, Object> getAny() {
        Map<String, Object> m = new HashMap<>();
        m.put("field2", this.field1);
        m.put("field3", this.field1.toUpperCase());

        return m;
    }
}

不是您正在寻找的基于注释的解决方案。。。但是您可以使用两个getter:
getField1()
getField2()
都返回
field1
@ernest\k将您的想法作为答案。我有一种感觉,它会被接受。我在想,只要尝试
com.fasterxml.jackson.databind.annotation.JsonAppend
,就可以找到一个简单的解决方案。但似乎对于属性,可能需要做更多的工作(我认为只有在这种情况经常发生时才值得),我使用的是lombok,所以只有字段,但为了简单起见,包装器getter获胜。
class Foo {
    private String field1 = "blah";

    public String getField1() {
        return field1;
    }

    @JsonAnyGetter
    public Map<String, Object> getAny() {
        Map<String, Object> m = new HashMap<>();
        m.put("field2", this.field1);
        m.put("field3", this.field1.toUpperCase());

        return m;
    }
}
{"field1":"blah","field3":"BLAH","field2":"blah"}