关于 jackson /JPA组合的问题
JSON
目的?我看到一个示例项目似乎只有注释为 @JsonIgnored
的类被 JSON
跳过.如果是这样,那么这怎么会发生,这种机制的背后是什么?怎么样JACKSON
处理那些没有任何 Jackson 注释的实体,默认情况下是否忽略?我一直在网上寻找资源,但运气不佳。 Jackson
与要工作的实体区分开来? 谢谢。
最佳答案
Jackson 和 JPA 彼此没有任何关系。 Jackson 是一个 JSON 解析库,JPA 是一个持久化框架。 Jackson 可以连载 几乎所有 对象 - 唯一的要求是对象具有某种可识别的属性( Javabean type properties ,或用 @JsonProperty
注释的裸字段。反序列化还有一个额外的要求,即目标类型具有默认(无参数)构造函数所以,例如,这是一个 Jackson 可以序列化的对象:
// Class with a single Javabean property, "name"
class Person {
private String name;
public String getName() { return name ; }
public String setName(String name) { this.name = name ; }
}
这是另一个:
// Class with a single field annotated with @JsonProperty
class Account {
@JsonProperty("accountNumber")
private String accountNumber;
}
这是另一个:
@Entity
public class User {
@Id
private Long id;
@Basic
private String userName;
@Basic
@JsonIgnore
private String password;
@Basic
@JsonIgnore
private Address address;
// Constructors, getters, setters
}
最后一个示例显示了一个 JPA 实体类 - 就 Jackson 而言,它可以像任何其他类型一样被序列化。 但是 ,注意它的字段:当这个对象被序列化为 JSON 时,两个字段将不会被包含 - 'password' 和 'address'。这是因为它们已被注释为
@JsonIgnore
. @JsonIgnore
注释允许开发人员说“嘿,可以序列化这个对象,但是当你这样做时,不要在输出中包含这些字段”。此排除仅针对此对象的字段发生,例如,如果您包含 Address
另一个类中的字段,但没有将该字段标记为可忽略,它将被序列化。防止类型序列化 在所有情况下 ,无论上下文如何,使用
@JsonIgnoreType
注解。当在类型上使用时,它基本上意味着“我不在乎在哪里使用这种类型,从不序列化它”。
关于json - 使用 Jackson 将 JPA 实体序列化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975363/