Мое приложение имеет два модуля: API A и компонент визуализации V .
Некоторые классы моделей API аннотируются через org.codehaus.jackson.annotation
(Джексон 1.9.13).В одном логическом потоке объекты, основанные на этих моделях, сериализуются в JSON и доставляются в V .
V , в настоящее время использующие com.fasterxml.jackson.core.ObjectMapper
(Джексон 2.9.1) длядесериализация полученных объектов.( V имеет A в качестве зависимости, и, следовательно, Джексон 1.9.13 также присутствует в classpath транзитивно.)
Поскольку Jackson 2.9.1 пытаетсядесериализовать данные в аннотированные классы Jackson 1.9.13, некоторые функции, такие как пользовательские сопоставления имен enum, не работают.Например:
enum Size {
XL("Extra Large"),
L("Large"),
M("Medium"),
S("Small"),
XS("Extra Small");
private String name;
Size(String name) {
this.name = name;
}
public String getName() {
return name;
}
@org.codehaus.jackson.annotate.JsonCreator
public static Size forValue(String value) {
for (Size size : Size.values()) {
if (size.getName().equals(value)) {
return size;
}
}
return null;
}
}
class Model {
String name;
Size size;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSize() {
return size.getName();
}
public void setSize(Size size) {
this.size = size;
}
}
V не может десериализовать объекты из вышеуказанного класса Model
, с этой ошибкой:
com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `Size` from String "Medium": value not one of declared Enum instance names: [S, XL, M, XS, L]
at [Source: (String)"{"name":"foo","size":"Medium"}"; line: 1, column: 22] (through reference chain: Model["size"])
Все это имеет смысл (так как1.9.13 - 2.9.1 - это несовместимое назад изменение), но каковы мои варианты?Придется ли мне понижать логику десериализации V до Джексона 1.9.13?Или есть какой-нибудь «адаптер» или конфигурация, которую я мог бы просто «подключить», чтобы аннотации 1.9.13 работали под 2.9.1?
(я бы не стал обновлять A до 2.9.1 на данный момент, поскольку общий размер пакета A является серьезной проблемой, переключение на com.fasterxml.jackson.core:jackson-databind
увеличит общий размер зависимости Джексона A отОт 980 КБ до 1,51 МБ - неприемлемо, поскольку полный пакет ядра (который основан на A ; не включает V ) в настоящее время имеет размер менее 8 МБ.)