繁体   English   中英

将POJO序列化为JSON,并将某些值作为String或list

[英]Serializing POJO to json with some value as String or list

假设我有这个POJO:

@JsonInclude(Include.NON_NULL)
public class Model {

    @JsonProperty(value="data")
    private String dataStr;
    private List<String> data;
}

并且应该序列化为

{ "data": "hello" }

要么

{
    "data": [
        "hello",
        "world"
    ]
}

根据某些条件。 我该如何与杰克逊做到这一点?

上面给出的类不起作用。 到目前为止,我发现的唯一解决方案是

@JsonInclude(Include.NON_NULL)
public class Model {

    @JsonProperty
    private Object data;
}

但这不是最好的。 我认为有一种方法可以执行类似@OneOf 有任何想法吗?

就像您发现的那样,您确实可以使用类型java.lang.Object 如果可以预先构建响应类型,则另一JsonNode似的方法是使用JsonNode

另一种方法是使用批注@JsonValue和容器类型。 然后,您可以将详细信息隔离在单独的holder类中,例如:

public class Model {
    public Wrapper data;
}

public class Wrapper {
    @JsonValue
    public Object methodToBuildValue() {
       // code to figure out what to return, String, List etc
    }
}

在这种情况下, methodToBuildValue()返回的任何methodToBuildValue()都会被序列化,而不是Wrapper值本身。 这提供了更大的灵活性,并增加了更多的键入内容。 您可以为Wrapper使用不同的访问Wrapper ,以使用自己的代码。

不确定最好的方法是什么,但是我实际上只是建议使用这种松散类型的JSON结构可能不是一个好主意-它不容易映射到Java或C#等静态类型的语言,而且我不确定好处是。 但是我假设您没有定义要使用的JSON结构,所以这可能是一个有争议的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM