2013-02-18 6 views
1

를 반환 나는이 방법이 있습니다빈 객체 된 JSONObject

@GET 
@Path("/myservice") 
@Produces(MediaType.APPLICATION_JSON) 
public Response mysercice() { 

    boolean userExists = false; 
    CacheControl cacheControl = new CacheControl(); 
    cacheControl.setNoCache(true); 
    cacheControl.setNoStore(true); 

    JSONObject jsonObject = new JSONObject(); 
    jsonObject.put("userExists", userExists); 
    return Response.ok(jsonObject, MediaType.APPLICATION_JSON).cacheControl(cacheControl).build(); 

} 

브라우저의 방법의 URL에 접근, 내가} {얻을를, 그것은 개체가 비어 있음을 의미한다. 그러나 단순히 된 JSONObject 반환 할 때 왜 이해하지 못했지만, 우리는 브라우저 얻을 :

return Response.ok(jsonObject.toString(), MediaType.APPLICATION_JSON).cacheControl(cacheControl).build(); 

그래서, 나는 브라우저에서 {거짓 "userExists을"} 얻을 : 그래서, 내가 사용하려고 빈 개체.

+0

자바 객체는 문자열 때문에 반환 객체로 저장하고 문자열 표현은 완전히 다른 일이되지 않기 때문에 복잡한 객체 직렬화 얼마나 – kaysush

+0

브라우저가 모르는 -. 자바, 닷넷 , 파이썬 .. 그래서 귀하의 HTTP 프로토콜입니다.하지만 그들은 문자열 개체를 이해할. – anoopelias

+0

하지만 코드에서 나는 간단한 자바 객체 (모든 속성은 문자열입니다) 반환하는 예제가 있고 이 예제에서 객체는 브라우저에서 비어 있지 않습니다. 그래서 JSONObject의 경우 비어있는 이유는 무엇입니까? –

답변

2

대부분의 JAX-RS 구현에는 응답 엔터티를 JSON에 매핑하기위한 공급자가 함께 제공됩니다. 그래서 당신은 쓸 때 : 당신은 기본적으로 요청하는

return Response.ok(jsonObject, MediaType.APPLICATION_JSON).build(); 

당신을위한 JSON에 JAX-RS 제공자 마샬 JSONObject. 유일한 문제는 JSONObject이 실제로 이런 식으로 직렬화 될 의도가 없다는 것입니다. 대신 점진적으로 JSON 표현을 작성한 다음 해당 표현을 JSON 문자열 값으로 변환하는 데 사용됩니다. 다음 두 가지 옵션이 있습니다.

  1. 클라이언트로 다시 보내려는 모든 입력란을 포함하는 POJO를 만듭니다. 메서드에서이 POJO를 반환하면 자동으로 JSON으로 변환됩니다. (return Response.ok (myPojo, MediaType.APPLICATION_JSON) .build()

  2. JSON 데이터를 String으로 직접 반환합니다 . 여러분들의 예)

+0

흥미 롭습니다. 감사합니다. :) –