consumes
@ResponseBody
@RequestMapping(value = "/reply/replyList.wow")
public Map<String,Object> replyList(ReplySearchVO searchVO){
List<ReplyVO> replyList=replyService.getReplyListByParent(searchVO);
Map<String,Object> map=new HashMap<String, Object>();
map.put("result", true);
map.put("data", replyList);
map.put("size", replyList.size());
return map;
}
위는 freeView에서 댓글을 보여줄 때 사용하는 댓글리스트 요청 처리 메소드이다.
기본적으로 @RequestMapping은 value값에 맞는 요청이 오면 해당 메소드가 실행된다.
consumes 속성은 요청헤더 Content-type의 값을 제한하겠다는 의미이다.
@RequestMapping(value = "/reply/replyList.wow",
consumes = {MediaType.APPLICATION_JSON_VALUE,MediaType.APPLICATION_XML_VALUE} )
각각 "application/json" ,"application/xml" 의 Content-type이다.
이렇게 consumes를 명시하면 Content-type이 "application/json" ,"application/xml" 이 아닌 요청은
처리하지 않는다.
기존의 replyList.wow 요청의 Content-type은 application/x-www-form-urlencoded; charset=UTF-8이기 때문에
위와 consumes을 정의해주면 415에러(MediaType이 다름)이 발생합니다.
그런데 보통 요청은 파일처리 처럼 특별한 요청이 아니면 json,xml 등으로 요청하는 경우는 많지 않아
요청을 제한하는 경우는 거의 없다. 그것보다는 요청을 처리하고나서 서버에서 데이터를 전달할 때
해당 데이터가 json,xml인지를 정해줘야 하는 경우가 많다. 이 때 produces 속성을 사용한다.
produces
@ResponseBody
@RequestMapping(value = "/reply/replyList.wow")
public Map<String,Object> replyList(ReplySearchVO searchVO){
List<ReplyVO> replyList=replyService.getReplyListByParent(searchVO);
Map<String,Object> map=new HashMap<String, Object>();
map.put("result", true);
map.put("data", replyList);
map.put("size", replyList.size());
return map;
}
위 메소드에서 return 값 map이 그대로 응답데이터가 된다. 이 때 이 응답데이터를 받는 곳이 자바가 아닐수도있다.
브라우저(+ajax)에서 받을 것이다. 브라우저에서는 자바를 해석할 줄 모르기 때문에 map을 받아도 소용이없다.
그래서 Spring은 이를 알맞은 형태로 변환해서 전달하는데, produces는 이를 지정하는 것이다.
(따로 명시하지 않으면 "application/json"이나 "text/html"으로 응답할 것이다.)
return 하는 데이터를 xml형태로 로 바꾸고 싶다거나 인코딩 방식을 지정하고 싶다면 다음과 같이 작성하면 된다.
@RequestMapping(value = "/reply/replyList.wow", produces = MediaType.APPLICATION_XML_VALUE)
//return 값을 xml로 보내겠다.
@RequestMapping(value = "/reply/replyList.wow"
, produces = "application/json;charset=UTF-8")
//return값을 json으로 보내고 인코딩은 UTF-8로 하겠다
보통 요즘엔 "application/json;charset=UTF-8"를 사용한다.
아래는 ajax의 요청을 json으로 응답한 replyList.wow의 요청,처리 헤더들이다.