Mil*_*das 4 json jax-rs one-to-many eclipselink jackson
我正在使用JPA EclipseLink在UseCase和PainPoint之间建立一对多关系的模型。我能够很好地插入值。此后,我使用JAX-RS通过GET方法检索数据。GET方法失败,并显示错误- 生成不完整的JSON。
控制台日志:
用例:
@NamedQueries({@NamedQuery(name = "getAllUseCases", query = "SELECT c FROM UseCase c")})
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@Column(name = "UseCaseID")
private int UseCaseID;
@Column(name = "Description")
private String Description;
@OneToMany(mappedBy="usecase", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
private Collection<PainPoint> painPoints = new ArrayList<PainPoint>();
Run Code Online (Sandbox Code Playgroud)
痛点:
@NamedQueries({@NamedQuery(name = "getAllPainPoints", query = "SELECT c FROM PainPoint c")})
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@Column(name = "PainPointID")
private int PainPointID;
@Column(name = "PainPointDescription")
private String PainPointDescription;
@ManyToOne
@JoinColumn (name="USECASE_ID", referencedColumnName="UseCaseID")
private UseCase usecase;
Run Code Online (Sandbox Code Playgroud)
数据加载器:
UseCase useCase = new UseCase("Description 1");
PainPoint painPoint1 = new PainPoint("Pain Point 1", useCase);
useCase.getPainPoints().add(painPoint1);
em.persist(useCase);
Run Code Online (Sandbox Code Playgroud)
UseCaseService:
@GET
@Path("/")
public List<UseCase> getUseCases() {
List<UseCase> retVal = null;
EntityManagerFactory emf = Utility.getEntityManagerFactory();
EntityManager em = emf.createEntityManager();
retVal = em.createNamedQuery("getAllUseCases").getResultList();
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
在用于循环引用或任何其他派生字段的getter方法上添加注解@JsonbTransient(程序包:javax.json.bind.annotation.JsonbTransient)。这等效于XML生成的@XmlTranisent批注,并且将阻止到JSON的转换进入无限循环。
我猜取决于您的工具集,但是对我来说,使用NetBeans,当实体类自动生成时,会添加XML的注释,而不是JSON的注释。只需将每个@XmlTransient与等效的@JsonbTransient匹配
| 归档时间: |
|
| 查看次数: |
3226 次 |
| 最近记录: |