为Json添加动态JSON属性作为Java Pojo
我需要从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个不同的键:
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"
  } ]
}
以上是 为Json添加动态JSON属性作为Java Pojo 的全部内容, 来源链接: utcz.com/qa/415088.html








