본문 바로가기
개발 공부

[@RequestParam vs @RequestBody vs @ModelAttribute] feat. 검증

by 도됐좋 2023. 8. 21.
순서
1. @RequestParam이란
2. @RequestBody란
3. @ModelAttribute란

 

✅ @RequestParam

- 1개의 HTTP 요청 파라미터를 받기 위해 사용

- Body를 직접 조회하지 않음

- 필수이기 때문에 반드시 해당 파라미터가 전송되어야 함

  (필수 값을 해제하려면 required 속성을 false로 설정)

  (기본값을 설정하려면 defaultValue 속성 사용)

@GetMapping("/test")
public String requestParam(@RequestParam("name") String name,
                           @RequestParam(name = "age", required = false) int age) {
	....
}

 


 

✅ @RequestBody

- 클라이언트가 전송하는 Json 형태의 HTTP Body를 Java 객체로 하기 위해 사용

- 바인딩이 아닌 변환을 시키는 것이기 때문에 변수들의 Setter 함수가 없어도 저장됨

@PostMapping("/register")
public String register(@RequestBody Member member) {
	....
}

 


 

✅ @ModelAttribute

- 클라이언트가 전송하는 form 형태의 HTTP Body와 요청 파라미터들을 특정 Java 객체에 바인딩하기 위해 사용

- 변환이 아닌 바인딩을 시키기 때문에 변수들의 Setter 함수가 없으면 저장되지 않음

- 파라미터 레벨 뿐만 아니라 메소드 레벨에도 적용 가능

- 다양한 검증(Validation) 작업 진행

@GetMapping("/register")
public String register(@ModelAttribute Member member) {
	....
}

 

검증(Validation)

- @ModelAttribute의 바인딩 작업이 실패로 끝나는 경우 2가지

   1. 기본적으로 실행되는 타입 변환에 실패함

   2. 검증기(validator)를 통과하지 못 함 (=> 검증기는 사용자가 직접 정의하는 부분)

- Form의 submit을 처리하는 컨트롤러 메소드에서 검증기를 이용한 검증 작업은 필수

- 위와 같은 경우 사용되는 API

   Validator, BindingResult, Errors

 

➤ Errors

- 오류 저장과 조회 기능을 제공하는 인터페이스

 

BindingResult

- Errors 인터페이스를 상속받아, 검증 오류를 보관하고 조회하는데 더해 추가적인 메소드를 제공해주는 인터페이스

- @ModelAttribute 바로 다음 파라미터로 선언해서 오류 발생 시 사용

@GetMapping("/register")
public String register(@ModelAttribute Member member, BindingResult result) {
	....
}