У меня есть класс исполнителя запроса, который отправляет запрос в веб-службу, а затем читает ответы и создает объект 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 аннотация.
Обратите внимание, что я не могу изменить исполнителя запросов, поэтому я не могу вставить другой десериализатор или что-то в этом роде.