我需要从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"
} ]
}
也可以看看:
问题内容: 我需要从Java pojo创建这样的Json有效负载: 所以我创建了一个Java pojo像这样: 我喜欢Label类中的“ add”属性是动态的,因此它也可以采用“ remove”,“ set”之类的值。除了为每个人创建另一个POJO之外,还有其他方法吗? 问题答案: 您可以使用JsonAnyGetter批注来创建动态对。下面的示例显示了如何为同一类生成3个不同的键: 上面的代码打印
问题内容: 我有这个回应: 然后,我要基于 exercise_type 属性实例化不同的对象实例(的子类),因此我在以下位置创建此混合: 所以我创建如下 我的测试: 问题在于,由于某种原因,用作属性on 的 exercise_type 属性被映射为 null 。知道我该如何解决吗? 问题答案: 最后,我在API文档中找到了解决方案 关于类型标识符可见性的注意事项:默认情况下,类型标识符的反序列化(
我需要在序列化时动态过滤bean属性。 不是我的选择。 假设我的Bean(作为Json符号): 我想使用以下属性编写 JSON: 预期的 JSON 结果为: 最后,我将在RestController中创建一个注释(),用于Spring,如下所示:
我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A
问题内容: 我有一个类需要使用杰克逊进行反序列化,并且该类具有collection属性。集合为空,但不为null。问题:如何在 没有 空集合的 情况下 反序列化类。下面的示例代码: 如果 那么json除外: 不 怎么做?谢谢~~ ================================================ 我已经通过n1ckolas的建议解决了这个问题。先谢谢你 我的杰克逊版本
我正在调用一个返回JSON的endpoint,它看起来像这样(在Postman中): 此请求返回的Content-Type头是(与通常的 类来自外部库(编写这个endpoint的人)。无论如何,当我试图通过< code > rest template . exchange()调用这个endpoint时,Jackson都无法将这个JSON反序列化为一个有效的< code>Result类。我正在这样做