如何实现在 JSON 输出中忽略某些属性(例如用于 XML 输出的 XmlTransient)?
@GET
@Path("/{companyId}")
@Produces(MediaType.APPLICATION_JSON)
public PortfolioCompany getCompany(@PathParam("companyId") long id);
我一直在玩 Seam 2.3 中的 RESTeasy-support,作为 JBoss 7.1 上的 EAR 部署。我首先将与 Seam-restbay-example 中相同的依赖项添加到我的 ejb 项目中。@Produces(MediaType.APPLICATION_XML) 基本上可以正常工作,其中所有使用 @XmlTransient 注释的属性都被忽略,以防止一些 LazyInitialisationExceptions。但是如何为@Produces(MediaType.APPLICATION_JSON) 实现这种行为?
我读过 Seam 默认使用 Jettison,它对 XML 和 JSON 都使用 @XmlTransient 注释(因为从技术上讲,它从 XML -> 转换为 JSON)。但是我得到一个“原因:org.codehaus.jackson.map.JsonMappingException:没有为类 org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer 找到序列化程序”,这表明它实际上正在使用 Jackson..?对于 Jackson 来说,有像 @JsonIgnore 这样的注释,但具有像 restbay 一样的 maven 依赖项——这“不能被解析为一个类型”。
/**
* @return the contact
*/
@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@XmlTransient // working for produces XML but not for JSON
//@JsonIgnore = unknown type
public Contact getContact() {
return contact;
}
有人对此有任何经验或提示吗?
谢谢
编辑:真的没有人需要使用 Seam 实现 REST 服务的惰性集合?
经过一番研究:
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property ="@id")
显然是需要的。但这仅在 Jackson 2.x 中提供。但是 seam2.3/jboss7 设置显然使用的是 Jackson 1.9...