Джексон Парсер - как сообщить объектному сопоставителю, что имя класса не совпадает с именем поля в ответе - PullRequest
1 голос
/ 12 марта 2012

У меня есть класс исполнителя запроса, который отправляет запрос в веб-службу, а затем читает ответы и создает объект java из ответа, используя ObjectMapper.readValue ();

Моя проблема в том, что веб-служба возвращает ответы в смешанном регистре, а не в правильном 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, которые похожи. Проблема заключается в том, что хотя поле заголовка корректно демаршализируется объекту ResponseHeader, поскольку имя параметра действительно является «заголовком», 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 , он просто анализирует ее, но все внутри равно нулю ...

Мне нужно знать, как аннотировать класс, чтобы я мог определить имя поля, которому он должен соответствовать, и которое отличается от имени класса точно так же, как я могу сделать для полей \ методов, используя @ JsonProperty аннотация.

Обратите внимание, что я не могу изменить исполнителя запросов, поэтому я не могу вставить другой десериализатор или что-то в этом роде.

1 Ответ

2 голосов
/ 12 марта 2012

Хорошо, поэтому я просто сделал глупую ошибку, но в надежде, что это поможет другим, я оставлю вопрос с ответом: Я не должен был использовать ServiceResponse как класс, переданный objectMapper.readValue (), а скорее DTO, который его содержит. Я сделал это для всех других типов данных и по какой-то причине забыл сделать это здесь.

мой плохой ...:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...