我使用带有DSL JSON类的自定义序列化在我的POJO类中使用@JsonAnySetter和@JsonAnyGetter,Map已初始化但其他属性始终为null。 我的POJO课程:
@CompiledJson
public class Name {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
Map<String,String> properties = new HashMap<String,String>();
public Name() {
// TODO Auto-generated constructor stub
}
@JsonAnyGetter
public Map<String, String> get() {
return this.properties;
}
@JsonAnySetter
public void set(String key, String value) {
this.properties.put(key, value);
}
使用DSLJson serialize()和deserialize()方法进行De / Serializing。我也没有看到任何错误,但JSON中的属性仍然为null。我怀疑DSL Json是否支持Jackson注释。 :/
使用DSL Json和Jackson Annotations的Spring Boot App
更新 我想解析MyClass,它是RootClass的一部分:
@Compiledjson
public class RootClass {
private String id;
private List<MyClass> myclass;
private AnotherCLass class2;
//getters and setter here
}
@CompiledJson
public class MyClass implements JsonObject {
private String name;
private Map<String, String> properties; //want this to behave like Jackson's @JsonAnySetter/Getter annotation.
//The implementation of MapConverter serializer you mentioned below.
}
整个代码通过自定义消息阅读器和编写器进行解析。
在发送我的JSON Body时,它会是这样的:
{
"id" : "1234",
"myclass" :
[
{
"name" : "abcd",
//any dynamic properties I want to add will go here
"test" : "test1",
"anything" : "anything"
}
],
"class2" : "test5"
}
谢谢:)
答案 0 :(得分:0)
DSL-JSON不支持这样的get()/ set(字符串,字符串)方法对。
它确实理解Map&lt; String,String&gt;因此,如果您公开properties
,它将对此有所帮助。但不是在这种设置中。
从v1.1开始,你有两种方法可以解决这些问题,example project
涵盖了这两个问题。如果您希望重用现有转换器,您的解决方案可能如下所示:
public static class MyClass {
private String name;
private Map<String, String> properties;
@JsonConverter(target = MyClass.class)
public static class MyClassConverter {
public static final JsonReader.ReadObject<MyClass> JSON_READER = new JsonReader.ReadObject<MyClass>() {
public MyClass read(JsonReader reader) throws IOException {
Map<String, String> properties = MapConverter.deserialize(reader);
MyClass result = new MyClass();
result.name = properties.get("name");
result.properties = properties;
return result;
}
};
public static final JsonWriter.WriteObject<MyClass> JSON_WRITER = new JsonWriter.WriteObject<MyClass>() {
public void write(JsonWriter writer, MyClass value) {
MapConverter.serialize(value.properties, writer);
}
};
}
}