2016-12-27 4 views
0

나는 메서드 custom (GET)을 가진 REST webservice를 가지고있다.cxf에서 메시지 본문에 사용자 지정 개체를 설정하는 방법은 무엇입니까?

@GET 
@Path("/custom") 
public UIResponse custom(final UIParameters uiParameters){...} 

이 방법에는 하나의 인수가 있습니다. 이것은 내 사용자 지정 개체입니다.

개체 UIParameters는 쿼리 문자열로 지정된 인수에서 작성됩니다.

예 : http://example.com/custom?objectType=article

UIParameters은 하나 개의 필드를 포함 할 객체 : 나는, URL에서이 매개 변수를 얻을 수 InInterceptor를 사용 UIParameter 객체를 구축하고 메시지의 내용을 설정하기위한 시도

UIParameters { 
    String objectType = "article"; 
} 

. 불행히도 그것은 작동하지 않습니다. 그 후 UIParameters에 MessageBodyReader를 제공했지만 여전히 작동하지 않습니다.

이 목표를 달성하려면 어떻게해야합니까?

감사

업데이트 :

내가 헤더를 http로 쿼리 문자열을 복사 한 InInterceptor에서

. 이제 MessageBodyReader에서 사용자 장소 매개 변수에 액세스 할 수있는 URL의 일부입니다. 여기서 객체 UIParameters를 작성할 수 있습니다.

모든 것이 잘 작동하지만이 솔루션이 최고라고는 생각하지 않습니다.

누군가 더 좋은 해결책을 알고 있습니까?

답변

0

주석 QueryParam("")은 삽입 된 모든 쿼리 매개 변수를 가져올 수 있습니다.

인터셉터가 필요하지 않으므로 권장되는 방법은 아닙니다. 쿼리 매개 변수를 사용하여 빈을 직접 구축 할

@GET 
@Path("/custom") 
public UIResponse custom(@Context UriInfo uriInfo){ 
    MultivaluedMap<String, String> params = uriInfo.getQueryParameters(); 
    new UIParameters().Builder() 
     .objectType(params.getFirst("type")) 
     .build(); 
} 
+0

감사합니다 @Context UriInfo 주석을 사용하는 경우에는 CXF 문서 http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Parameterbeans

@GET @Path("/custom") public UIResponse custom(@QueryParam("") UIParameters uiParameters) class UIParameters { String objectType; } 

를 참조하십시오. 물론 이것이 최선의 방법이지만 불행히도 나는 setter를 사용할 수 없기 때문에 빌더 패턴을 사용하고 싶다. – bombel

+0

세터없이 시도하십시오. 나는 사용자 정의에 의해 그들을 복사했지만, 문서가 필요하지 않을 수도 있습니다. – pedrofb

+0

어떻게 모든 체인을 호출할까요? 새로운 UIParameters(). Builder(). objectType ("type"). build(); 모든 필드를 설정 한 후 전체 개체의 유효성을 검사하려고합니다. – bombel