Для чего используются @JsonTypeInfo и @JsonSubTypes в jacksonJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Для чего используются @JsonTypeInfo и @JsonSubTypes в jackson

Сообщение Anonymous »

Для чего используются аннотации @JsonTypeInfo и @JsonSubTypes в Jackson?

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

public class Lion extends Animal {

private String name;

@JsonCreator
public Lion(@JsonProperty("name") String name) {
this.name = name;
}

public String getName() {
return name;
}

public String getSound() {
return "Roar";
}

public String getType() {
return "carnivorous";
}

public boolean isEndangered() {
return true;
}

@Override
public String toString() {
return "Lion [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType() + ", isEndangered()="
+ isEndangered() + "]";
}

}
====================================== =

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

public class Elephant extends Animal {

@JsonProperty
private String name;

@JsonCreator
public Elephant(@JsonProperty("name") String name) {
this.name = name;
}

public String getName() {
return name;
}

public String getSound() {
return "trumpet";
}

public String getType() {
return "herbivorous";
}

public boolean isEndangered() {
return false;
}

@Override
public String toString() {
return "Elephant [name=" + name + ", getName()=" + getName() + ", getSound()=" + getSound() + ", getType()=" + getType()
+ ", isEndangered()=" + isEndangered() + "]";
}
}
====================================== =======

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

@JsonTypeInfo (use = JsonTypeInfo.Id.CLASS, include = As.PROPERTY, property = "classNameExtenral")
@JsonSubTypes ({@Type (value = Lion.class, name = "lion"), @Type (value = Elephant.class, name = "elephant")})

public abstract class Animal {

@JsonProperty ("name")
String name;
@JsonProperty ("sound")
String sound;
@JsonProperty ("type")
String type;
@JsonProperty ("endangered")
boolean endangered;
}

public static void main(String[] args){
Lion lion = new Lion("Simba");
Elephant elephant = new Elephant("Manny");
List animals = new ArrayList();
animals.add(lion);
animals.add(elephant);
}
Насколько я понимаю, он дополнительно сохраняет конкретный тип сериализуемого объекта вместе с фактическими данными.
Что мне не ясно, так это то, каково фактическое преимущество/выигрыш во время десериализации.
Не получаю никакой важной документации, кроме документации Java. Может кто-нибудь помочь здесь или предоставить какие-нибудь документы по тому же поводу.

Подробнее здесь: https://stackoverflow.com/questions/454 ... in-jackson
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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