Мы используем Jackson 1.9.1 для сериализации и десериализации строк ответа запроса JSON на/из объектов Java. Примитивные типы Java, типы коллекций и пользовательские объекты (де) сериализуются без проблем. Однако у меня есть проблема с десериализацией строки JSON в java-перечислении. JSON строку сериализации следующим образом: типDeserialize java enum от JSON
"wt":{"wt":100.5,"unit":{"LBS":3}}
Java для масс, как так:
public class Weight {
protected double weight;
protected Unit unit;
}
я говорил this, this и this на SO и придумал перечисление для весовых единиц, таких как так:
public enum Unit {
KG("kg"),
GM("gm"),
LBS("lbs"),
OZ("oz");
private String value;
private WeightMeasurementUnit(String value) { this.value = value; }
@JsonValue
public String getValue() { return this.value; }
@JsonCreator
public static Unit create(String val) {
Unit[] units = Unit.values();
for (Unit unit : units) {
if (unit.getValue().equals(val)) {
return unit;
}
}
return LBS;
}
}
проблема заключается в том, когда я когда-нибудь попробовать десериализации выше JSON я получаю эту ошибку говоря : "Непризнанные поле "LBS"(класс abcdWeight), не помеченных как игнорируемые" Исключение StackTrace, как так:
Caused by: org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "LBS" (Class a.b.c.d.Weight), not marked as ignorable
at [Source: [email protected]; line: 1, column: 464] (through reference chain: a.b.c.d.MyRequest["blah"]->a.b.c.d.AnotherType["wt"]->a.b.c.d.Weight["LBS"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
at org.codehaus.jackson.map.deser.std.StdDeserializer.reportUnknownProperty(StdDeserializer.java:673)
at org.codehaus.jackson.map.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:659)
at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:1365)
...
Мои вопросы: ли сериализованная JSON строка для перечисления Кажется правильным? Что еще я должен включать (или аннотировать), чтобы перечисление было правильно десериализовано?
Просто угадать - выглядит как это числа ваших полей перечислений, чтобы при сериализации, KG = 1, GM = 2 и т.д. Работает ли, если вы используете эти цифры в ваших перечислений инициализаторах KG используйте то есть (1); ГМ (2); LBS (3); ОЗ (4); в определении единицы перечисления? –