В качестве общего ответа это можно сделать с помощью пользовательского JsonDeserialiser
, например:
public class HtmlAdapter implements JsonDeserializer<String> {
@Override
public String deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context)
throws JsonParseException {
return StringEscapeUtils.unescapeHtml4(json.getAsString());
}
}
и добавлением
gsonBuilder.registerTypeAdapter(String.class, new HtmlAdapter())
к вашему статическому блоку.Метод StringEscapeUtils.unescapeHtml4
взят из внешней библиотеки org.apache.commons, commons-text
, но вы можете сделать это любым удобным для вас способом.
Проблема с этим конкретным адаптером заключается в том, что он применяется ко всем десериализованным String
поля и это может или не может быть проблемой производительности.
Чтобы иметь более сложное решение, вы также можете взглянуть на TypeAdapterFactory
.С этим вы можете решить для каждого класса, если вы хотите применить некоторый адаптер типа для этого класса.Поэтому, если, например, ваши POJO наследуют какой-то общий базовый класс, было бы просто проверить, расширяет ли класс этот базовый класс и возвращает ли адаптер, например, HtmlAdapter
, чтобы применить декодирование HTML для String
s в этом классе.