У нас есть класс, содержащий несколько наборов длин. Мы хотим, чтобы они были сериализованы как массивы, и большинство клиентов делают это.Jackson - Используйте специальный десериализатор только для конкретного JSON
Однако у нас есть клиент PHP, который создает такие множества, что они сериализуются нечетным образом. Набор с номером 4 приходит так:
"setOfNumbers": {
"4": 0
},
Естественно, Джексон жалуется на это является объектом, а не массив. То, что я хотел бы, чтобы иметь собственный десериализации, который вызывается только если Джексон обнаруживает объект, где Set<Long>
должен быть
Я попытался это (и в идеале, только если они содержатся в специальных классах.):
this.addDeserializer(Set.class, new StdDelegatingDeserializer<>(new StdConverter<Map<String, Long>, Set<Long>>() {
@Override
public Set<Long> convert(Map<String, Long> set) {
return parseLongs(set);
}
}));
Проблема в том, что теперь он ожидает объект вместо массива для всех полей Set. Вызывается десериализованный класс, поэтому я не могу добавлять какие-либо аннотации или делать другие изменения.
PHP, кажется, есть ряд творческих интерпретаций JSON. – chrylis