2013-04-15 52 views
1

如何實現JSON輸出中的某些屬性被忽略(如XML輸出的XmlTransient)?Seam 2.3 JBoss 7.1上的RESTEasy @JsonIgnore

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

我一直在使用Seam 2.3中的RESTeasy支持,在JBoss 7.1上作爲EAR部署。我開始在我的ejb-project中添加與Seam-restbay-example相同的依賴項。 對於@Produces(MediaType.APPLICATION_XML),它基本上可以正常工作,其中用@XmlTransient註釋的所有屬性都將被忽略,以防止出現一些LazyInitialisationException。 但是,如何實現@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這樣的註釋,但具有相同的maven依賴關係(如restbay) - 這種「無法解析爲類型」。

/** 
* @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 ...

回答

0

@ XmlType/@ XmlRootElement的默認註釋模式是捕獲每個字段,包括休眠狀態下的lazy初始化程序。在您的實體中使用@XmlAccessorType(XmlAccessType.NONE),然後使用@XmlElement單獨註釋這些字段,以便只處理必要的字段