我有一个请求执行器类,它将请求发送到Web服务,然后读取响应并使用ObjectMapper.readValue()创建响应中的java对象;
我的问题是webservice在mixedCase中返回响应,而不是在响应中的类的正确CamelCase中返回响应,例如以下响应:
{
"serviceResponse": {
"header": {
"success": "false",
"dateTime": "2012-03-12 09:06:45.60 UTC",
"errorCodes": [
{
"code": "123",
"message": "error occured while trying to get response - User not Logged in",
"causeString": "css_idks"
}
]
},
"body": {
"cls": "lst",
"empty": {}
}
}
}
我的班级结构如下: ServiceResponse.Java:
public class ServiceResponse implements Serializable {
public ResponseHeader header;
public ResponseBody body;
}
我也有类似ResponseHeader.java和ResponseBody.java的类。 问题是,当header字段正确地解组到ResponseHeader对象,因为参数名称确实是'header'时,ServiceResponse失败,因为类名以大写字母S而不是小写字母s开头。
尝试解析响应时出现以下异常:
03-12 11:14:14.078: E/ELAD(3473): org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "serviceResponse" (Class com.elad.ServiceResponse), not marked as ignorable
如果我添加 ignorable = true 注释,它只会解析它但内部的所有内容都为null ...
我需要知道如何对类进行注释,以便我可以定义一个应该映射到的字段名称,该名称与类的名称不同,就像我能够使用的字段\方法一样 @JsonProperty 注释。
请注意,我无法更改请求执行程序,因此我无法输入不同的反序列化程序或类似内容。
答案 0 :(得分:2)
好的,所以我犯了一个愚蠢的错误,但是希望这会对别人有所帮助,我会把问题留给我答案: 我不应该使用ServiceResponse作为传递给objectMapper.readValue()的类,而是使用包含它的DTO。 我为所有其他数据类型做了这些,并且由于某种原因忘了在这里做。
我的坏......:)