Annotation jsonunrupped, кажется, игнорируется за десериализациюJAVA

Программисты JAVA общаются здесь
Anonymous
Annotation jsonunrupped, кажется, игнорируется за десериализацию

Сообщение Anonymous »

, кажется, у меня есть проблемы с десериализацией с использованием Джексона. Я использую поле, которое сериализуется на несколько полей в JSON (развернут), и оно, кажется, работает только в одном направлении. При попытке десериализации Deserializer, кажется, получает только узел JSON для одного свойства вместо полного класса, и я не уверен, что я делаю неправильно.

Код: Выделить всё

{
"name": "The name",
"description": "The description"
}
< /code>
Я хочу добавить карту с локализацией рядом с полем < /p>
{
"name": "The name",
"name_l10n": {
"en": "The name",
"fr": "Le nom"
}
"description": "The description.",
"description_l10n": {
"en": "The description.",
"fr": "La description nom."
}
}
Итак, я заменяю поля строки в моем исходном классе ...

Код: Выделить всё

public class MyFancyClass {

private String name;
private String description;

// ... getters and setters

}
to localizefield s

Код: Выделить всё

public class MyFancyClass {

private LocalizedField name;
private LocalizedField description;

// ... getters and setters

}
< /code>
Класс, который представляет поле с локализацией, очень Straigforward: < /p>
public class LocalizedField {

private String value;
private Map value_l10n;

// ... getters and setters
Для сериализации мне нужно добавить @jsonunrapped в определение поля, и я также установил IsunWrappingSerializer в true , потому что он, похоже, не работает иначе. Фактически, это код сериализатора < /p>

Код: Выделить всё

@Override
public void serialize(LocalizedField field, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
String value = field.getValue();
if (value != null && !value.trim().isEmpty()) {
jgen.writeStringField(name, value);
}
LocalizedString i18n = field.getValue_l10n();
if (i18n != null && !i18n.isEmpty()) {
jgen.writeFieldName(name + "_l10n");
jgen.writeStartObject();
for (Map.Entry e : i18n.entrySet()) {
jgen.writeStringField(e.getKey(), e.getValue());
}
jgen.writeEndObject();
}
}
Я делаю то же самое для Deserializer, но я получаю только строку, которая соответствует свойству (т.е. только значение значения и я не могу получить доступ к значению_L10N ).

.

Код: Выделить всё

public LocalizedField deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
LocalizedField result = new LocalizedField();

JsonNode node = ctxt.readTree(p);     // (1) only receives a string
result.setValue(getText(node, name));

JsonNode i18n = node.get(name + "_i18n");
if (i18n != null && i18n.isObject()) {
// parse into map
// ...
}

return result.isEmpty() ? null : result;
}
Кроме того, я добираюсь до этой точки только тогда, когда я устанавливаю jsonignoreproperties .
Как это должно работать? Я хочу использовать это локализованное на нескольких классах и отобразить его с соответствующим JPA Embeddable.

Подробнее здесь: https://stackoverflow.com/questions/796 ... ialization

Вернуться в «JAVA»