on
1129_Spring : @ResponseBody, @RequestBody, @RestController
1129_Spring : @ResponseBody, @RequestBody, @RestController
@ResponseBody
핸들러 메소드에서 @ResponseBody 애노테이션이 적용된 경우 반환 객체를 HTTP 응답으로 전송한다.
- 메소드에서 반환하는 자바 객체를 HTTP 응답 몸체로 변환한다.
- 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할
HttpMessageConverter를 통해 HTTP 응답 스트림으로 변환
를 통해 HttpMessageConverter 구현 클래스를 모두 등록할 수 있다.
주요 HttpMessageConverter 구현 클래스
- StringHttpMessageConverter : 요청 몸체를 문자열로 변환하거나 문자열을 응답 몸체로 변환
(text/plain;charset=ISO-8859-1)
- Jaxb2RootElementHttpMessageConverter : XML 용청 몸체를 자바 객체로 변환하거나 자바 객체를 XML 응답 몸체로 변환(text/xml, application/xml)
- MappingJackson2HttpMessageConverter : JSON 요청 몸체를 자바 객체로 변환하거나 자바 객체를 JSON 응답 몸체로 변환(text/json, application/json)
- ByteArrayHttpMessageConverter : HTTP 메시지와 byte 배열 사이의 변환을 처리(application/octet-stream)
- 스프링 4.0부터는 MappingJackson2HttpMessageConverter를 이용ㅇ하여 자바 객체를 JSON으로 변환하거나 JSON을 자바 객체로 변환하며, 다음의 의존성을 추가해야 한다.
com.fasterxml.jackson.core jackson-databind 2.11.3
- 스프링 3.x 에서는 MappingJacksonHttpMessageConverter를 이용하여 변환 한다.
MappingJacksonHttpMessageConverter는 jackson-mapper-asl, jackson-core-asl의 의존성을 추가해야 한다.
- 스프링 4.0에 추가된 @RestController 애노테이션으로 컨트롤러를 설정하면, @RestController에는 기본적으로 @ResponseBody 애노테이션이 적용되어 메소드 레벨에서 추가하지 않아도 된다.
사용 예
1) String을 JSON으로 변환하여 반환
- 문자열을 JSON 반환할 때, 한글을 반환하는 경우 반드시 produces 옵션을 통해 charset을 명시 해야 한다.
@RequestMapping(value = "/user", produces="application/json;charset=utf-8") @ResponseBody public String process(@RequestParam String id) { String name = service.getName(id); return "{\"name\":\"+name+"\"}"; }
2) Map을 JSON으로 변환하여 반환
@RequestMapping(value = "/user") @ResponseBody public Map process(@RequestParam int idx) { Map model = service.readMap(idx); return model; }
@RequestBody
HTTP 요청 몸체를 자바 객체로 전달받음
HTTP 요청의 body 내용을 자바 객체로 매핑하는 역할
POST 형식으로 응답 받는 경우에만 사용할 수 있다.
사용 예 - JSON 형식으로 전송한 요청 파라미터를 전달 받아 JSON 형식으로 응답
- JSON 형식의 요청 파라미터를 member 객체에 전달받아 처리 후, 처리 결과를 가지고 있는 loginMember 객체를 JSON으로 변환하여 응답한다.
@RequestMapping(value = "/member/login", method=RequestMethod.POST) @ResponseBody public Member loginSubmit(@RequestBody Member member) throws Exception { Member loginMember = memberService.login(member); return loginMember; }
@RestController
@RestController는 @Controller에 @ResponseBody가 추가된 애노테이션이다.
스프링 4.0부터 지원한다.
REST 방식의 데이터 처리를 위해 사용하는 애노테이션
- @RestController는 자바 객체를 JSON/XML 타입으로 반환하는 REST 서비스에 최적화된 컨트롤러
@Controller와 @RestController 차이점
- @Controller
API와 뷰를 동시에 서비스하는 경우에 사용하며, API 서비스는 @ResponseBody를 붙여줘야 한다.
- @RestController
뷰가 필요 없는 API를 서비스하는 경우에 사용. @ResponseBody를 포함하고 있다.
- @RestController 에서 뷰를 반환해야 하는 경우에는 ModelAndView를 반환한다.
from http://development-writing.tistory.com/359 by ccl(S) rewrite - 2021-11-30 03:01:41