Java Jackson解析器-如何让对象映射器知道类的名称与响应中字段的名称不在同一个大小写中
我有一个请求执行器类,它将请求发送到Web服务,然后读取响应,并使用ObjectMapper.readValue()从响应中创建java对象 我的问题是,对于响应中的类,webservice以mixedCase返回响应,而不是以正确的CamelCase返回响应,因此,例如,以下响应:Java Jackson解析器-如何让对象映射器知道类的名称与响应中字段的名称不在同一个大小写中,java,json,jackson,Java,Json,Jackson,我有一个请求执行器类,它将请求发送到Web服务,然后读取响应,并使用ObjectMapper.readValue()从响应中创建java对象 我的问题是,对于响应中的类,webservice以mixedCase返回响应,而不是以正确的CamelCase返回响应,因此,例如,以下响应: { "serviceResponse": { "header": { "success": "false", "dateTime":
{
"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": {}
}
}
}
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
我的班级结构如下:
ServiceResponse.Java:
public class ServiceResponse implements Serializable {
public ResponseHeader header;
public ResponseBody body;
}
我还有类似的ResponseHeader.java和ResponseBody.java类。
问题是,虽然header字段正确地解组到ResponseHeader对象,因为参数名确实是“header”,但ServiceResponse失败,因为类名以大写字母S而不是小写字母S开头
我在尝试分析响应时遇到以下异常:
{
"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": {}
}
}
}
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注释的fields\methods不同
请注意,我无法更改请求执行器,因此无法放入其他反序列化程序或类似的程序。好的,所以我犯了一个愚蠢的错误,但希望这能帮助其他人,我将保留问题和答案: 我不应该使用ServiceResponse作为传递给objectMapper.readValue()的类,而应该使用包含它的DTO。 我对所有其他数据类型都这么做了,但出于某种原因,我忘了在这里这么做 我的坏…:)