Backend - @RequestBody, @ResponseBody에 대해서 알아보자.
Backend - @RequestBody, @ResponseBody에 대해서 알아보자.
Spring boot를 사용하면서 RESTful API 서버를 개발하는데 사용되는 @RequestBody, @ResponseBody에 대해서 알아보자.
@RequestBody
@RequestBody 어노테이션은 HTTP 요청 본문(body)에 있는 데이터를 Java 객체로 역직렬화 시킬 때 사용한다.
@RequestBody.java
1
2
3
4
5
6
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestBody {
boolean required() default true;
}
위 코드에서 확인할 수 있듯이 @RequestBody는 파라미터에만 적용이 가능하다.
처리 흐름
- 클라이언트가
JSON데이터로 HTTP 요청을 보냄 @RequestBody어노테이션이 있을 경우HttpMessageConverter가 동작하여JSON을 Java 객체로 역직렬화 처리- 컨트롤러 메서드에서 파라미터로 활용
@ResponseBody
컨트롤러에서 반환한 객체를 JSON 같은 응답 본문으로 직렬화 시킬 때 사용한다.
ResponseBody.java
1
2
3
4
5
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {
}
위 코드에서 확인할 수 있듯이 @ResponseBody 어노테이션은 @RequestBody 어노테이션과는 다르게 클래스와 메서드에만 적용이 가능하다.
@ResponseBody어노테이션을 붙이지 않을 경우 기본적으로ViewResolver가 동작하여 템플릿 파일을 찾게된다.
처리 흐름
- 메서드가 객체를 리턴
HttpMessageConverter가 동작하여 Java 객체를JSON형태로 직렬화
@RestController
@RestController 어노테이션은 아래와 같이 구현되어있다.
RestController.java
1
2
3
4
5
6
7
8
9
10
11
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
위 코드를 확인해보면 @Controller 어노테이션과 @ResponseBody 어노테이션이 같이 붙어있으며, 클래스 레벨에만 적용시킬 수 있다.
즉, @RestController 어노테이션은 클래스 단위로 붙기 때문에 이 어노테이션이 붙은 클래스의 모든 메서드들의 반환 값은 @ResponseBody 어노테이션 덕분에 자동으로 직렬화되서 리턴된다.
처리 흐름
- 컨트롤러 메서드가 객체를 리턴
@ResponseBody가 자동으로 적용되어 있음HttpMessageConverter가JSON으로 변환- 응답 본문에
JSON이 담김
This post is licensed under CC BY 4.0 by the author.