2012-08-04 4 views
0

저는 잠시 동안 저지를 사용 해왔고 방금 Json을 인수로 사용하는 POST 메서드를 구현했습니다. 그러나 나는이 기능을하고 싶습니다 :Jersey POST 메서드 인수를 ClassObject로 사용

// The json class to be used and returned 
    @XmlRootElement 
    public class Container 
    { 
     private boolean isOk; 
     private String message; 

     public Container() {} 

     public boolean getOk() 
     { 
      return this.isOk; 
     } 

     public void setOk(boolean isOk) 
     { 
      this.isOk = isOk; 
     } 
    } 

    // A service 
    @Path("json/test") 
    public class TestService 
    { 
     @POST 
     @Consumes(MediaType.APPLICATION_JSON) 
     @Produces(MediaType.APPLICATION_JSON) 
     public Container readAndReturnMessage(Container receivedJson) 
     { 
      doSomething(receivedJson.getMessage()); 
      return receivedJson; 
     } 
    } 

불행히도 이것은 작동하지 않습니다. 서비스에 전달 된 원시 json에는 아무런 문제가 없지만 컨테이너 변수는 모두 null입니다. 여기의 접근법은 무엇입니까? 대신 String을 인수로 사용하고 Jackson/Gson을 사용하여 역 직렬화해야합니까?

답변

0

Container 클래스에 대한 getter 및 setter를 추가하십시오.

upd. Here은 Java Bean 생성을위한 준비 사항입니다. 이름 지정 섹션을 참조하십시오. 그건 그렇고 부울 필드로는 실패했습니다. 가장 좋은 방법 : 당신이 어떤 헤더를 추가하지 않은

boolean ok; 

public boolean isOk(){ 
    return this.ok; 
} 

/* if setter is required */ 
public setOk(boolean ok){ 
    this.ok = ok; 
} 
+0

죄송합니다, getters 및 setters이 있습니다. 방금 그들을 추가하는 것을 잊었다. –

+0

변수 이름이'isOk'이면 getter는'getIsOk()'과 setter' setIsOk (boolean isOk)이어야합니다 –

+0

변수는 실제로이 경우 getter와 setter에 의존합니까? –

2

경우, 당신은 당신의 POST 요청 콘텐츠 형식 헤더를 추가해야합니다. 응용 프로그램이 응용 프로그램/json을 소비하므로 콘텐츠 유형 : application/json을 POST 요청과 함께 추가해야합니다. : 귀하의 요청에 몸이 형태의 경우

{ "컨테이너": { "isOk": "true"로, "메시지": "새 메시지" } } 당신은 null 값을 얻을 것이다.

요청 몸은 형식이어야합니다 { "isOk": "true"로, "메시지": "새 메시지" } 이 잘 작동합니다.

관련 문제