关于 Jackson/JPA 组合的问题
如果当前应用程序中有大约 20 个实体,并且我在 POM 中添加了 Jackson 依赖项,这是否意味着默认情况下所有实体都准备好转换为JSON
目的?我看到一个示例项目似乎只有类注释为@JsonIgnored
被跳过JSON
。如果是这样,那么怎么会发生这种情况,这种机制背后的原因是什么?如何JACKSON
处理那些没有任何 Jackson 注释的实体,默认情况下是否忽略?我一直在网上寻找资源,但运气不佳。
如果 20 个实体中只有一个需要映射到 JSON 对象,是否意味着我必须将 @JsonIgnore 添加到所有其他 19 个实体?如果没有,如何Jackson
与要工作的实体区分开来?
Thanks.
Jackson和JPA没有任何关系。 Jackson是一个JSON解析库,JPA是一个持久化框架。杰克逊可以连载 几乎任何对象 - 唯一的要求是该对象具有某种可识别的属性(Javabean 类型属性,或用注释的裸字段@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 而言,它可以像任何其他类型一样被序列化。But,记下它的字段:当该对象序列化为 JSON 时,将不包含两个字段 - 'password' 和 'address'。这是因为它们已被注释为@JsonIgnore. The @JsonIgnore
注释允许开发人员说“嘿,序列化这个对象是可以的,但是当你这样做时,不要在输出中包含这些字段”。此排除仅发生于此对象的字段,因此例如,如果您包含Address
另一个类中的字段,但没有将该字段标记为可忽略,它将被序列化。
防止类型序列化在所有情况下,无论上下文如何,都使用@JsonIgnoreType注解。当用于类型时,它基本上意味着“我不关心该类型在哪里使用,从不序列化它”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)