2012-09-18 3 views
10

저지와 함께 REST-Webservice를 설정하려고합니다. 현재 JSON에서 String 또는 다른 Value 유형의 올바른 표현에 대해 다소 혼란스러워합니다.저지로 문자열의 JSON 표현을 반환

{"name":"reini","role":"admin"} 

내 두 번째 방법은 다음과 같습니다 : 그런 "좋은"JSON 문자열을 표시하는 브라우저에서이 메소드를 호출

@GET 
@Path("user") 
@Produces(MediaType.APPLICATION_JSON) 
public User user() { 
    return new User("reini", "admin"); 
} 

: 다음은 두 조각입니다

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
} 

Browsing에서 해당 메서드를 호출하면 JSON-Stuff (중괄호 등)가없는 순수한 문자열이 표시됩니다.

Hello firefox, it is Tue Sep 18 13:52:57 CEST 2012 

이 서비스는 dojo 툴킷으로 사용하고 싶습니다. 문제는, 내가 [handleAs : "json"] 플래그를 설정하자마자 두 번째 메소드를 얻는 것입니다. 그것은 나를 "SyntaxError : 예기치 않은 토큰 H"오류가 발생합니다. 여기서 "H"는 반환 된 문자열의 첫 번째 문자입니다.

So : String과 다른 값 유형의 올바른 json 표현은 무엇이며이를 생성하기위한 내 메소드에 대해 설정해야하는 주석은 무엇입니까?

답변

5

DTO을 정의하고 String을 입력해야합니다. 따라서 하나의 문자열을 속성으로 갖는 HelloResp 클래스를 사용할 수 있습니다. 귀하의 방법에서 그 속성을 채우고 돌아 오십시오.

확인할 수 있습니다. Tutorial. 또 tutorial.

Firefox가 응답을 처리하고 있지 않기 때문에 오류가 표시되지 않습니다. 서비스에 의해 반환되는 것은 무엇이든 표시됩니다. 이 툴킷은 그러나 JSON과 같은 리스폰스를 처리하기 시작하지만 유효한 JSON을하지 않았다 (JSON은 {로 시작)

+0

입니다 :

그냥 일반 텍스트 (MediaType.TEXT_PLAIN)로 복귀? – Reini

+0

각 유형별 DTO는 – SiMet

+1

입니다. "JSON은 {"로 시작합니다. - 올바르지 않습니다. http://json.org에 따르면 따옴표 붙은 문자열 리터럴 (string literal)도 유효한 JSON이며 jersey는 문자열을 JSON 문자열로 올바르게 직렬화해야합니다. – ddumont

2

또한로 반환 할 수 있습니다

@GET 
@Path("hello/{name}") 
@Produces(MediaType.APPLICATION_JSON) 
public String hello(@PathParam("name") String name) { 
    return "\"Hello " + name + ", it is " + new Date()+'"'; 
} 

그러나 그것은 나를 위해 매우 이상한 모양입니다.

모든 개체에 대해 DTO를 만드는 것은 하나의 문자열에 대해서도 이상하게 보입니다.

더 좋은 방법이 있습니까?

+0

큰 따옴표를 사용하는 이유를 설명해 주시겠습니까? ("") 대신에 "return"Something? 나는 그 문제가 있는데 일반 문자열이 유효한 json 응답으로 변환되지 않는 이유를 이해하지 못합니다. – user1386966

+0

이유는 MediaType 응용 프로그램 Json을 반환하고 일부 json을 "{\"a \ ": 1} "는 문자열이 아닙니다. 개선 된 답변보기 – SiMet

1

String을 반환하는 경우 왜 JSON 유형으로 정의합니까? 이 모든 작업에 대한 DTO를 만들거나 내가 사용하려는 각 유형에 대한 DTO를 작성하는 것이 더

@GET 
@Path("hello/{name}") 
@Produces(MediaType.TEXT_PLAIN) 
public String hello(@PathParam("name") String name) { 
    return "Hello " + name + ", it is " + new Date(); 
}