2013-07-23 2 views
0

한다고 가정 우리는이 POST를 제공하는 일부 편안하고 자원을 단지 문자열입니다 @Produces @Consumes 의미 ... JSON 아니면

@POST 
@Produces("application/json") 
@Consumes("application/json") 
public String doPostJson(String string) { 
    ... 
} 

는 (내 서버에 위의를 실행 할 수 있었다 나는 가정하고 있으므로 이것은 유효한 구현입니다)

이제 doPostJson()이 String을 가져오고 String을 반환한다고 생각합니다. 이 문자열은 JSON 유효한 문자열과 완전히 다른 것일 수 있습니다. 내가 맞습니까? 그래서 여기에 문자열을 사용할 수 있다면 "application/json"의 의미는 무엇입니까?

기타 : 다른 한편으로, 나는 이것을 사용할 수 있을까요?

@POST 
@Produces("text/plain") 
@Consumes("text/plain") 
public String doPostJson(String string) { 
    ... /* read passed parameter as JSON valid string and return JSON string */ 
} 

답변

3

ProducesConsumes 주석이 웹 서비스 사용자와 각각 Content-TypeAccept 헤더 정보를 공유하기 위해 사용하는 대신 응용 프로그램/JSON의 예제 이미지/JPEG에 대한 응답이 잘못된 MIME 형식이어야 거부 완전히 있습니다. Content-Type 헤더는 서비스의 수신자/고객이 해당 헤더의 정보에 따라 응답을 처리하는 데 도움이됩니다. content-type 헤더의 값을 application/json으로 표시하면 리시버는 json 파서를 사용할 수 있습니다. 비슷하게, Consumes를 사용하면 Accept 헤더가 application/json이라는 보장을하므로 json 파싱/언 마샬링을 적절하게 수행 할 수 있습니다.

+1

아마도 내 API의 유일한 소비자이기 때문에 차이가 느껴지지 않을 수 있습니다 ...하지만 '공용'사용자는 서버에서 반환 된 JSON의 구조를 알아야하므로이 API를 사용하는 모든 사용자는 JSON을 알고/기대하십시오. 그게 사실이야? 예를 들어 서버 인 경우 추가 유효성 검사를 위해서만 Content-Type입니까? API에서 무언가를 변경하고 다른 데이터 형식을 사용합니까? – flyer

+1

@flyer 예 Content-Type을 사용하면 웹 서비스 사용자가 웹 서비스를 사용하는 방법을 결정할 수 있습니다. 웹 서비스는 json이나 xml과 같이 다른 내용을 생성 할 수 있습니다. 이제 소비자가 어떻게 결정할 지, 응답을 파싱하려면 어떤 파서를 사용해야하는지. 따라서 소비자는 content-type 헤더를 조사하여 대응하는 파서를 가져와 응답을 소비합니다. –

1

"응용 프로그램/JSON은"당신이 밖으로 제공하는 MIME 타입이며, 좀 더 자세한 내용은 link이 관련 질문을 참조하십시오. 응용 프로그램이 응용 프로그램과 통신하는 데 도움이됩니다. 그들은

+0

감사합니다. 그것은 내가 지금까지 본 대부분의 upvoted 토론처럼 보입니다. 내 질문은 "이 설정이 내 응용 프로그램에 어떻게 도움이되는지"와 더 비슷합니까? – flyer

+0

조금 내 대답을 업데이트했습니다 – Zavior