当前位置: 首页 > 知识库问答 >
问题:

@jsonanysetter,@jsonanygetter with DSL Json(De)/序列化不取值(始终为空)

金瑞
2023-03-14
  @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()方法解/序列化。我也没有看到任何错误,但在JSON中properties仍然为null。我怀疑DSL JSON是否支持Jackson注释。:/

带有DSL、Json和Jackson注释的Spring Boot应用程序

更新我想解析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.
}
{
"id" : "1234",
"myclass" :
[
{
"name" : "abcd",
//any dynamic properties I want to add will go here
 "test" : "test1",
 "anything" : "anything"
}
],
"class2" : "test5"
}

谢谢:)

共有1个答案

萧萧迟
2023-03-14

DSL-JSON不支持这样的get()/set(string,string)方法对。它确实理解map ,所以如果您公开 properties,它就会在这方面起作用。但不是在这种情况下。

从V1.1开始,您有两个解决此类问题的选项,这两个选项都包含在示例项目中

如果您希望重用现有转换器,您的解决方案可以如下所示:

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);
            }
        };
    }
}
 类似资料:
  • 我在使用Jackson1.9.13(和Jackson2.5.0)进行序列化/反序列化时遇到了一个问题,现在已经解决了几天了,没有任何成功。 我的目标是使用@jsonanygetter&@jsonanysetter,我想动态地计算对象是否应该写入输出。我有一个用ObjectMapper序列化的JSON定义(并检查是否应该包含对象),然后将对象转换回字符串。 为此,我使用了一个“HidableSeri

  • 上面的代码不会编译为错误: 错误[E0277]: trait绑定

  • 通过我所做的所有搜索,我明白了使用jackson序列化/反序列化包含混合内容的xml是有问题的。有人知道用Java处理以下xml的方法吗? 我正在使用以下POJO: 如果节点有混合内容,如上例所示,我将得到以下错误: 如果节点具有纯文本,则反序列化工作。 我尝试使用JsonNode、TextNode、ObjectNode、Object代替String作为数据类型。我尝试了自定义序列化程序和反序列化

  • 问题内容: 最近,我一直在进行相当多的JSON解析,并在Node.js和浏览器中传递Javascript,并遇到了这个难题。 我使用构造函数创建的任何对象都无法通过JSON.stringify进行完全序列化,除非我单独初始化构造函数中的所有值!这意味着我的原型在设计这些类时实际上变得毫无用处。 有人可以阐明为什么以下内容没有按我期望的那样进行序列化吗? 怎么了: a_string == {“ in

  • 问题内容: 使用Jackson 2,我正在寻找一种 通用的 方式将对象序列化为单个值(然后序列化它们,然后再填充该单个字段),而不必重复创建JsonSerializer / JsonDeserializer来处理每种情况。@JsonIdentityInfo批注非常接近,但由于我知道,它将始终对完整的子对象进行序列化,因此略微遗漏了该标记。 这是我想做的一个例子。给定的类: 我希望Order可以序列

  • 问题内容: 我有以下用于序列化查询集的代码; 以下是我的 我需要序列化。但是它说无法序列化。因为列表由Django对象和字典组成。有任何想法吗 ? 问题答案: 并且不能很好地与Django对象配合使用。 Django的内置序列化器只能序列化由django对象填充的查询集: 在您的情况下,其中包含django对象和dict的混合。 一种选择是摆脱中的模型实例,并使用dict将其替换为: 希望有帮助。