У меня есть POJO так:
private String httpStatus;
private String message;
// getter setter
}
Мне нужно десериализовать JSON, который имеет динамический формат.
Так, например, иногда мой объект json будет выглядеть так:
{
"httpStatus": 422,
"message": "The given data was invalid.",
"data": {
"fields": {
"user.name": [
"The user.name field is required."
],
"location.name": [
"The location.name field is required."
]
}
}
}
И иногда будет иметь другое имя поля в fields
части, например:
{
"httpStatus": 422,
"message": "The given data was invalid.",
"data": {
"fields": {
"phone": [
"The phone field is required."
]
}
}
}
Я пытаюсь решить эту проблему, регистрируя gson TypeAdapter, но все еще безуспешно.
final GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Error.class, new ErrorTypeAdapter());
gsonBuilder.setPrettyPrinting();
final Gson gson = gsonBuilder.create();
Итак, моя цель - взять информационное сообщение об ошибке от data
-> fields
-> phone
-> получить первую строку и поместить ее в поле message
.
Поэтому, когда у меня есть строка json, такая как:
String errorJson = "{\n" +
"\"httpStatus\": 422,\n" +
"\"message\": \"The given data was invalid.\",\n" +
"\"data\": {\n" +
"\"fields\": {\n" +
"\"phone\": [\n" +
"\"The phone field is required.\"\n" +
"]\n" +
"}\n" +
"}\n" +
"}";
И я пытаюсь десериализовать, вызывая это:
final Error error = gson.fromJson(errorJson, Book.class);
System.out.println(error.getMessage);
Это должно вывести: The phone field is required
не: The given data was invalid.
Кто-нибудь может дать мне пример того, как я создаю класс ErrorTypeAdapter для решения этой проблемы? Спасибо.