有关Jackson / JPA组合的问题
如果当前应用程序中有大约20个实体,并且我在POM中添加了Jackson依赖项,是否意味着默认情况下所有实体都已准备好转换为JSON
对象?我看到一个示例项目似乎只有@JsonIgnored
被JSON
跳过的类注释。如果是这样,那怎么会发生这种机制背后的原因呢? JACKSON
如何处理那些没有任何Jackson注释的实体,默认情况下是否被忽略?我一直在网上寻找资源,但运气不好。
如果20个实体中只有一个需要映射到JSON对象,是否意味着我必须将@JsonIgnore添加到所有其他19个实体?如果没有,Jackson
如何与实体区分开来?
感谢。
答案 0 :(得分:13)
杰克逊和JPA彼此没有任何关系。 Jackson是一个JSON解析库,JPA是一个持久性框架。杰克逊可以序列化 几乎所有 对象 - 唯一的要求是该对象具有某种可识别的属性(Javabean type properties或裸露用@JsonProperty
注释的字段。反序列化还有一个要求,即目标类型有一个默认的(无参数)构造函数。例如,这是杰克逊可以使用的对象序列:
// 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时,将不包含两个字段 - “密码”和“地址”。这是因为它们已使用@JsonIgnore
注释。 @JsonIgnore
注释允许开发人员说'嘿,它可以序列化这个对象,但是当你这样做时,不要在输出中包含这些字段'。此排除仅发生在此对象的字段中,因此,例如,如果在另一个类中包含Address
字段,但未将该字段标记为可忽略,则将对其进行序列化。
要防止在所有情况下序列化 ,无论上下文如何,请使用@JsonIgnoreType
注释。当在一个类型上使用它基本上意味着'我不在乎这种类型的使用位置,从不序列化'。
答案 1 :(得分:1)