2014-12-23 1 views
0

오늘 내가 저지 문서 불구려고 할 때 나는하지 않습니다 (다음 문Jersey를 사용하여 요청시 주석이 달리지 않은 메소드 매개 변수를 보내려면 어떻게해야합니까?

Unlike method parameters that are associated with the extraction of request parameters, 
the method parameter associated with the representation being consumed does not require 
annotating. A maximum of one such unannotated method parameter may exist since there 
may only be a maximum of one such representation sent in a request. 

나는 우리가 요청에 이러한 매개 변수를 전송하는 방식에 따라서 매우 명확하지 JAX-RS에 새로운 오전 건너 온) 내가 이해 무엇 위의 진술에서

을 더 잘 이해하기 위해 어떤 구체적인 예를 찾을 수 있습니다, 우리는 우리가 길 원하는 주석 매개 변수를 사용하지 않는 일부는 여기에

@Path("restful") 
public class MyResource{ 
    ... 
    @GET 
    @Produces("application/text") 
    public String getStringResp(String param){ 
     ... 
     return "some value"; 
    } 
    .... 
} 

처럼 생각 리소스 방법을 가질 수, 매트릭스, qu ery 또는 다른 params.

이제 클라이언트 측에서 메서드 매개 변수 "param"에 값을 보낼 수 있습니까? "webtarget"또는 "invocationBuilder"에 대해 qeuryparam() 등의 api 메소드를 사용하여 매개 변수에 주석을 달면 요청 매개 변수를 보낼 수 있습니다. 여기에서는 그렇지 않습니다.

이해의 도와주세요. 사전

답변

1

이해하기 위해 우선의

덕분에 그 요구는 주로 두 부분으로, 몸과 헤더를 가지고있다. 여러분이 게시 한 문서에서 주석이없는 매개 변수가 궁극적으로 요청의 본문이라고 말하고 있습니다.

당신은 일반적으로 GET 요청 실체 본체를 보내지 만 PUTPOST를 들어, SyncInvoker에서 put(Entity<?> entity)post(Entity<?> entity), Ivocation.Builder 상속이 있습니다 않을 것

.

Entity 클래스에는 엔터티 본문을 구성 할 수있는 정적 메서드가 있습니다. 예를 들어

     // application/json data 
target.request().post(Entity.json(jsonStringDataOrPojo)); 

         // application/xml data 
target.request().post(Entity.xml(xmlStringDataOrPojo)); 

         // text/plain data 
target.request().post(Entity.entity(stringData, MediaType.TEXT_PLAIN)); 

         // text/plain data 
target.request().post(Entity.text(stringData)); 

String의 경우 실제로이 중 하나를 보낼 수 있습니다. 리소스 메소드에 @Consumes 주석을 지정하지 않았으므로 일반 텍스트 xml 또는 json이 될 수 있습니다. xml 및 json의 경우 원시 형식으로 데이터를 가져옵니다. 당신이

@POST 
@Consumes(MediaType.TEXT_PLAIN) 
public Response postString(String param){ 

그런 다음 당신이 그것을 보내 일반 텍스트를 필요가 있다면

은, 위의 예


+0

안녕하세요 Peeskillet, 나는 의심의 여지가 있습니다. 그 값은 요청에서 어떻게 보내질 것인가? 그것이 페이로드의 일부가 될지 그리고 그것이 페이로드의 일부로 보내지는 경우 서버 엔드에서 어떻게 식별되었는지를 알 수 있습니다. 내가 틀렸다면 나를 바로 잡아라. 감사합니다 – HJK

+0

'게시물'을 사용하여'Entity.text (stringData)'로 보내십시오. 그러나 서버 측 리소스 메소드가'@GET'이 아니라'@ POST'를 가지고 있는지 확인해야합니다. 서버와 마찬가지로 모든 데이터를 언 마샬링해야합니다.MessageBodyReader는 내부적으로, 다른 타입을 위해, 그렇게합니다. 기본적으로 매개 변수 유형이'String'이므로 JAX-RS는 데이터 스트림을 String으로 비 정렬화한 다음 MessageBodyReader를 찾아서 메서드에 전달합니다. –

+0

자세한 내용은 [6 장 - 8 장 ] (https://jersey.java.net/documentation/latest/index.html) –

-1

U의 마지막 중 하나, 즉 @PathParam ("param")과 같이 메소드 param에 @PathParam ("param")을 사용해야합니다.) param 더 많은 것을 알고 싶다면 소스 코드를 보시기 바랍니다.