2013-04-15 2 views
1

XML 출력을 위해 XmlTransient와 같은 JSON 출력에서 ​​일부 속성을 무시하는 방법은 무엇입니까?Seam 2.3 RESTEasy on JBoss 7.1 @JsonIgnore

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

저는 JBoss 7.1에 EAR로 배포 된 Seam 2.3의 RESTeasy 지원을 가지고 놀았습니다. 필자는 Seam-restbay 예제와 같이 ejb 프로젝트에 동일한 종속성을 추가하기 시작했습니다. 일부 LazyInitialisationExceptions을 방지하기 위해 기본적으로 @Produces (MediaType.APPLICATION_XML)에서 @XmlTransient로 주석 된 모든 속성이 무시되는 것이 좋습니다. 그러나 @Produces (MediaType.APPLICATION_JSON)에 대해이 동작을 수행하는 방법은 무엇입니까?

Seam은 기본적으로 Jettison을 사용합니다. 이는 XML과 JSON 모두에 @XmlTransient 주석을 사용합니다 (기술적으로 XML-> JSON으로 변환하기 때문에). 하지만 "org :: codehaus.jackson.map.JsonMappingException : org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer"클래스에 대한 serializer가 없습니다. 실제로 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; 
} 

누구든지 그 경험이나 힌트를 원하십니까?

감사

편집

: 정말 심과 REST-서비스에 대한 게으른 컬렉션을 실현의 필요성을 가지고 아무도 ?? 몇 가지 조사 후

:

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property ="@id") 

분명히 필요할 것이다 것입니다. 하지만 잭슨 2.x에서만 제공됩니다. 하지만 seam2.3/jboss7 설정은 분명히 Jackson 1.9를 사용합니다 ...

답변

0

@ XmlType/@ XmlRootElement의 기본 주석 모드는 hibernate의 지연 초기화 장치를 포함하여 모든 필드를 캡처하는 것입니다. 엔티티에서 @XmlAccessorType (XmlAccessType.NONE)을 사용하고 필드를 @XmlElement로 개별적으로 주석 처리하면 필요한 필드 만 처리됩니다.