@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를 반환한다.

+ Recent posts