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