ㅅㅇ
[Spring] @RequestBody, @RequestParam, @ModelAttribute 본문
@RuquestParam
1개의 HTTP 요청 파라미터를 받기 위해 사용하는 어노테이션
** @ModelAttribute 과 @RequestBody 의 방식의 차이를 이해하자.
@ModelAttribute
HTTP Body 내용과 HTTP 파라미터의 값들은 생성자, Getter, Setter를 통해 주입하기 위해 사용하는 어노테이션
- 값 변환이 아닌 값을 주입시키므로 변수들의 생성자나 Getter,Setter가 없으면 변수들이 저장되지 않는다.
@RequestBody
클라이언트가 전송하는 JSON 형태의 HTTP Body 내용을 Java Object로 변환시켜주는 어노테이션
- @RestController에서 @RequestBody의 바인딩은 Jackson라이브러리의 ObjectMapper을 통해 이뤄진다.
- 이때, ObjectMapper는 @RequestBody가 Property로 구현되어 있거나,
생성을 위임한 경우가 아니라면
기본 생성자는 꼭 필요하다. => @NoArgsConstructor가 필요한 이유
- 그리고 Reflection을 사용해서 필드 값들을 넣어주기에, Setter는 필요하지 않는다.
- 그러나, 이때, ObjectMapper는 Setter와 Getter로 DTO의 필드를 가져온다. 그렇기에
Getter, Setter 모두가 없다면 ObjectMapper가 바인딩하는데 DTO에 setter와 getter가 없으니 찾지 못해 오류가 난다.
그래서 Getter, Setter 둘 중 하나는 있어야 하는 것이다.
DTO에 사용할 필요가 거의 없는 Setter보다 프로덕션 코드에 사용되거나
테스트에서 필요한 Getter를 넣는 것이 좋다는 이유로
=> 일반적으로 기본생성자 @NoArgsConstructor와 @Getter 어노테이션을 작성한다.
'SW_STUDY > SpringBoot' 카테고리의 다른 글
[SpringSecurity JWT] 인증인가 구현 - 회원가입, 로그인, 토큰을 통한 접근 (0) | 2023.03.29 |
---|---|
[Spring boot] @PostConstruct 어노테이션 (0) | 2023.03.08 |
[Spring boot] @Transactional 어노테이션 (0) | 2023.03.08 |
[Spring Boot, Java] Object ↔ JSON 문자열 : Gson (0) | 2023.03.08 |
[Spring Boot, Java] Entity ↔ DTO 변환 : 자바 코드 매핑 & ModelMapper (0) | 2023.03.08 |