【发布时间】:2013-04-07 17:31:11
【问题描述】:
如何实现在 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...
【问题讨论】:
标签: json jboss7.x resteasy seam2