杰克逊和JPA没有什么做对方。 Jackson是一个JSON解析库,JPA是一个持久性框架。杰克逊可以序列几乎任何对象 - 唯一的要求是该对象具有某种与@JsonProperty
注释识别的属性(Javabean type properties,或裸字段没有为反序列化一个额外要求,即目标类型。有一个默认(无参数)构造函数,因此,举例来说,这是一个对象,杰克逊可以序列:
// 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实体类 - 就杰克逊而言它可以被序列化就像任何其他类型。 但是,注意它的字段:当这个对象被序列化成JSON时,两个字段将不会被包含 - 'password'和'address'。这是因为它们已被注释为@JsonIgnore
。 @JsonIgnore
批注允许开发者说'嘿,它可以序列化这个对象,但是当你这样做的时候不要在输出中包含这些字段'。此排除仅出现在此对象的字段中,因此,例如,如果您在另一个类中包含Address
字段,但未将该字段标记为可忽略,则会将其序列化。
为了防止类型的序列在所有情况下,不管上下文,使用@JsonIgnoreType
注解。当用于一个类型时,它基本上意味着'我不在乎使用这种类型的地方,从来没有序列化它'。
“实体”在您的环境中意味着什么?这是一堂课吗?一个班级的领域?方法?如果你含糊不清,不能帮你... –
@pgelinas它是一个类,就像JPA实体类一样。 – Dreamer