Alv*_*son 14 rest spring json jpa java-ee
假设我有以下JPA实体:
@Entity
public class Inner {
@Id private Long id;
private String name;
// getters/setters
}
@Entity
public class Outer {
@Id private Long id;
private String name;
@ManyToOne private Inner inner;
// getters/setters
}
Run Code Online (Sandbox Code Playgroud)
Spring和Java EE都具有带有默认序列化器的REST实现,这些序列化器将实体与JSON进行编组,无需进一步编码.但是当转换Outer
为JSON时,Spring和EE都嵌套了Inner
它的完整副本:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"inner": {
"id": "4321",
"name": "MyInnerName"
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的行为,但对我的Web服务有问题,因为对象图可以变得深/复杂并且可以包含循环引用.是否有任何方法可以配置提供的编组器以"浅"方式编组POJO /实体,而无需为每个编写器定制一个自定义JSON序列化器?一个适用于所有实体的自定义序列化程序都可以.我理想上喜欢这样的东西:
// Outer
{
"id": "1234",
"name": "MyOuterName",
"innerId": "4321"
}
Run Code Online (Sandbox Code Playgroud)
我也希望它能将JSON"解组"回到等效的java对象中.如果解决方案适用于Spring和Java EE,则可获得奖励.谢谢!
Mr_*_*que -1
您可以在序列化之前分离 JPA 实体,如果使用延迟加载,则可以避免加载子对象。
另一种方式,但取决于 JSON 序列化器 API,您可以使用“瞬态”或特定注释。
一个糟糕的方法是使用像 dozer 这样的工具将 JPA 对象复制到另一个类中,仅包含 json 所需的属性(但它有效......内存、CPU 和时间开销很小......)
@Entity
public class Outer {
@Id private Long id;
private String name;
@ManyToOne private Inner inner;
//load manually inner.id
private final Long innerId;
// getters/setters
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6804 次 |
最近记录: |