Jackson Parser - 如何让对象映射器知道类的名称与响应中字段的名称不同

时间:2012-03-12 09:43:14

标签: java json jackson

我有一个请求执行器类,它将请求发送到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 注释。

请注意,我无法更改请求执行程序,因此我无法输入不同的反序列化程序或类似内容。

1 个答案:

答案 0 :(得分:2)

好的,所以我犯了一个愚蠢的错误,但是希望这会对别人有所帮助,我会把问题留给我答案: 我不应该使用ServiceResponse作为传递给objectMapper.readValue()的类,而是使用包含它的DTO。 我为所有其他数据类型做了这些,并且由于某种原因忘了在这里做。

我的坏......:)