首页 文章

Seam 2.3 RESTEasy在JBoss 7.1 @JsonIgnore上

提问于
浏览
1

如何在JSON输出中忽略某些属性(如XmlTransient for XML-output)?

@GET
@Path("/{companyId}")   
@Produces(MediaType.APPLICATION_JSON)
public PortfolioCompany getCompany(@PathParam("companyId") long id);

我一直在使用在JBoss 7.1上作为EAR部署的Seam 2.3中的RESTeasy支持 . 我开始在我的ejb项目中添加与Seam-restbay-example相同的依赖项 . 它基本上适用于@Produces(MediaType.APPLICATION_XML),其中所有使用@XmlTransient注释的属性都被忽略,以防止一些LazyInitialisationExceptions . 但是如何为@Produces(MediaType.APPLICATION_JSON)实现这种行为?

我读过Seam默认使用Jettison,它使用@XmlTransient注释,XML和JSON(因为从技术上讲,它从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 ...

1 回答

  • 0

    @ XmlType / @ XmlRootElement的默认注释模式是捕获每个字段,包括来自hibernate的延迟初始值设定项 . 在实体中使用@XmlAccessorType(XmlAccessType.NONE),然后使用@XmlElement单独注释fiels,以便只处理必要的字段

相关问题