@ResponseBody
핸들러 메소드에서 @ResponseBody 애노테이션이 적용된 경우 반환 객체를 HTTP 응답으로 전송한다.
- 메소드에서 반환하는 자바 객체를 HTTP 응답 몸체로 변환한다.
- 자바 객체를 HTTP 요청의 body 내용으로 매핑하는 역할
HttpMessageConverter를 통해 HTTP 응답 스트림으로 변환
<mvc:annotation-driven/>를 통해 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을 자바 객체로 변환하며, 다음의 의존성을 추가해야 한다.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.3</version>
</dependency>
- 스프링 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<String, Object>을 JSON으로 변환하여 반환
@RequestMapping(value = "/user")
@ResponseBody
public Map<String, Object> process(@RequestParam int idx) {
Map<String, Object> 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를 반환한다.
'쌍용강북교육센터 > 11월' 카테고리의 다른 글
1124_Spring : AJAX 성적처리 (0) | 2021.11.25 |
---|---|
1118_Spring : @RequestParam 예제 (0) | 2021.11.21 |
1118_Spring : RedirectAttributes 예제 (0) | 2021.11.21 |
1118_Spring : @RequestHeader, @CookieValue 예제 (0) | 2021.11.21 |
1118_Spring : @SessionAttributes, @ModelAttribute 예제 (0) | 2021.11.21 |