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<Animal> animals = new ArrayList<>();
animals.add(lion);
animals.add(elephant);
}
我的理解是,它还保留了被序列化的对象的具体类型以及实际数据。
我不清楚的是反序列化过程中的实际优势/收益是什么。
除了java文档之外,没有任何重要的文档。任何人都可以在这里提供帮助或提供一些文件相同。
这些注释的目的是支持反序列化的多态性。当反序列化时,正在执行的实际代码将知道它期望的类。例如,某些字段的类型被反序列化。但是如果该类有子类(即子类型),通用Jackson反序列化器如何知道被反序列化的字符串是哪个实际类?它必须创建一个特定类型的实例(类或其子类之一)并填充它。它知道要创建哪个的唯一方法是如果该信息首先写入序列化中。
正如这个答案所说,有三种方法可以做到这一点——您可以选择适合您用例的方法。@JsonTypeInfo
@JsonSubtype
是其中一种方法——当您在编译时知道可能存在于所讨论的类的所有可能的子类型时,它会非常有效。
问题内容: 在jackson中使用的@JsonTypeInfo和@JsonSubTypes注释是什么? ======================================= ============================================== 我了解的是 ,它还保留了要序列化的对象的具体类型以及实际数据。 我不清楚 反序列化期间的实际优势/收益是什么。 除了Jav
我的maven项目可以在GitHub中找到。
Jackson框架提供了基于注释的方法来在序列化过程中发出类型信息。 我不想在我的超级类(Animal)中使用@JsonSubTypes注释。 相反,我想告诉我的子类,即狗和大象,动物是它们的父母。 有没有任何方法可以在不使用动物类中的注释的情况下做到这一点。 如果是,请提供示例,如果可能的话,也可以这样做。 下面是我试图解决的问题。“test”接收的JSON包含“type”字段,如“dog”或“
问题内容: 我刚刚开始使用Jackson JSON库。杰克逊(Jackson)是一个非常强大的库,但是它具有非常丰富的API。许多事情可以通过多种方式完成。这使得在Jackson很难找到自己的出路- 如何知道什么是正确/最佳的做事方式? 我为什么要使用此解决方案: 通过这样的解决方案: 或超过我使用JsonFactory和JsonParser遇到的解决方案,甚至还有更多选择… 似乎mape.rea
我试图转换一些使用Jackson的@JsonSubTypes注释来管理多态性的Java代码。 以下是可用的Java代码: 以下是我认为等效的Kotlin代码: 但我在三行“JsonSubTypes.Type”中的每一行都会出现以下错误: 知道吗?
我知道删除或修改注释可以做到这一点,但在这种情况下这不是一个选项。 -将关闭所有注释。这确实删除了冒犯字段,但也扼杀了我想工作的其他注释。