2016-09-16 47 views
1

我想请求帮助,使我的代码更清洁。解析PoJo的JSON字符串属性作为对象

我有这些的POJO例如:

class A { 
    B b; 
} 

class B { 
    int a; 
    int b; 
} 

数据来自HTTP请求和所述主体是JSON。我想通过将属性b作为JSON字符串(如下所示)解析为类A.

{ 
    "b":"{\"a\":1,\"b\":2}" 
} 

目前我使用自定义解析通过杰克逊的ObjectMapper,我做手工值验证。是否有可能在属性'b'上应用一些注释来表明它是一个包含在字符串中的复杂属性?

感谢您的帮助!

+0

没有必要那样做。 Jackson了解嵌套对象并正确反序列化对象'A',所以它将包含实际的'B'实例。 – ike3

+0

如果我让杰克逊进行反序列化,它会通过一个字符串输入来抱怨B中缺少构造函数。我希望有一种方式可以告诉Jackson将JSON格式的字符串视为JSON对象。 – m3dw3

+0

看来你的JSON格式不正确。你可以删除引号'“b”:{\“a \”:1,\“b \”:2}'?因为这个Jackson把它反序列化为String。如果这种格式是有意的(不推荐),那么您可以创建一个Jackson想要的构造函数,并在那里对字符串进行反序列化。 – ike3

回答

2

像这样的东西创建一个自定义构造函数:

class B { 
    public B() {} 
    public B(String value) { 
     B b = new ObjectMapper().readValue(value, B.class); 
     this.a = b.a; 
     this.b = b.b; 
    } 
    int a; 
    int b; 
} 

另一种解决方案是clould编写自定义解串器对于B

+1

这是一个很好的解决方案,但是如果杰克逊可以通过注释处理它,​​我会期待。 并且不要忘记在这里处理IOException。 – m3dw3