我有以下格式的JSON,我正试图用Jackson解析 -
"response":{
"response_inner":{
"a":{"field1":2,"field2":0,"field3":5,"field4":0,"field5":[{"field5_1":"b","field5_2":1},{"field5_1":"c","field5_2":1}]},
"d":{"field1":2,"field2":6,"field3":11,"field4":0,"field5":[{"field5_1":"c","field5_2":1},{"field5_1":"b","field5_2":1}]},
"response_inner_bool":false
}
}
这里的“a”,“b”等是一些可以在每个响应中改变的字符串。
我创建了一个Java对象来表示'response_inner'(让我们称之为ResponseInner),另一个用来表示包含字段的对象?(让我们称之为FieldInfo)但是我不知道如何解析这个使用@JsonCreator和@JsonProperty注释 - ResponseInner对象可以包含任意数量的String - > FieldInfo映射。
我尝试像这样解析它 -
public class Response {
private ResponseInner responseInner;
@JsonCreator
public Response(@JsonProperty("response_inner") ResponseInner responseInner) {
this.reponseInner = responseInner;
}
}
public class ResponseInner {
private Map<String, FieldInfo> stringToFieldInfoMap;
private boolean responseInnerBool;
@JsonCreator
public ResponseInner(Map<String, FieldInfo> stringToFieldInfoMap, @JsonProperty("response_inner_bool") boolean responseInnerBool ) {
this.stringToFieldInfoMap = stringToFieldInfoMap;
this.responseInnerBool = responseInnerBool;
}
}
但它抱怨构造函数的Argument#0没有属性名称注释;当多参数构造函数注释为Creator时,必须具有名称。有关如何解决此问题的任何建议吗?
答案 0 :(得分:0)
无论如何,您似乎没有在ResponseInner中使用stringToFieldInfoMap
。为什么需要将其作为参数传递?
如果你确实在该类中需要它,你可以通过setter设置它而不是将它传递给构造函数。
或者,您可以使用第三个类来处理响应的实际映射,该第三个类使用Response对象(这将反过来消耗已从其中删除Map的ResponseInner对象)。这实际上允许您将映射逻辑与响应逻辑分离。
public class MappedResponse {
private Map<String, FieldInfo> stringToFieldInfoMap;
private Response response;
public MappedResponse(Map<String, FieldInfo> stringToFieldInfoMap, Response response) {
this.stringToFieldInfoMap = stringToFieldInfoMap;
this.response = response;
}
}