我需要从Java pojo创建这样的Json有效负载:
{ "update" : { "labels" : [{"add" : "A label"} ] } }
所以我创建了一个Java pojo像这样:
@JsonRootName(value = "update") public class AddLabel{ @JsonProperty("labels") public List<Label> labels; public AddLabel(String labelName){ this.labels = new ArrayList<>(); this.labels.add(new Label(labelName); } public static class Label{ public String add; public Label(String labelName){ this.add = labelName; } } }
我喜欢将Label类中的“ add”属性设置为动态,以便它也可以采用诸如“ remove”,“ set”之类的值。除了为每个人创建另一个POJO之外,还有其他方法吗?
您可以使用JsonAnyGetter批注来创建动态key- value对。下面的示例显示了如何为同一Label类生成3个不同的键:
key- value
Label
import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonRootName; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public class JsonApp { public static void main(String[] args) throws Exception { AddLabel label = new AddLabel("A label"); label.getLabels().add(AddLabel.Label.remove("Remove")); label.getLabels().add(AddLabel.Label.set("Set")); ObjectMapper mapper = new ObjectMapper(); mapper.enable(SerializationFeature.INDENT_OUTPUT); System.out.println(mapper.writeValueAsString(label)); } } @JsonRootName(value = "update") class AddLabel { @JsonProperty("labels") private List<Label> labels; public AddLabel(String labelName) { this.labels = new ArrayList<>(); this.labels.add(Label.add(labelName)); } public List<Label> getLabels() { return labels; } public static class Label { private final String key; private final String value; private Label(String key, String value) { this.key = key; this.value = value; } public static Label add(String value) { return new Label("add", value); } public static Label remove(String value) { return new Label("remove", value); } public static Label set(String value) { return new Label("set", value); } @JsonAnyGetter public Map<String, String> getDynamic() { return Collections.singletonMap(key, value); } } }
上面的代码打印:
{ "labels" : [ { "add" : "A label" }, { "remove" : "Remove" }, { "set" : "Set" } ] }
也可以看看: