У меня есть класс исполнителя запросов, который отправляет запрос веб-службе, а затем читает ответы и создает объект Java из ответа, используя ObjectMapper.readValue();
Моя проблема в том, что веб-сервис возвращает ответы в 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, которые похожи. Проблема заключается в том, что хотя поле заголовка корректно демаршируется в объект 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 аннотация.
Обратите внимание, что я не могу изменить исполнителя запроса, поэтому я не могу добавить другой десериализатор или что-то в этом роде.