@RequestParam과 @ModelAttribute

이규훈·2022년 11월 1일
0

스프링 정리

목록 보기
6/30

@RequestParam

요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션이다.

public String main2(@RequestParam(name="year" required=false)String year)
=
public String main2(String year)

위 둘 코드는 같다. 앞에 year은 파라미터 이름이고 뒤의 required는 필수여부이다. 저렇게 생략이 가능하다는 것을 알아두자.

https://localhost/ch2/requestParam2 -> 이 경우에는 year = null
https://localhost/ch2/requestParam2?year -> 이 경우는 year ="" 빈문자열

null과 빈 문자열은 다르다

만약 required가 true인데 생략하고 싶으면 다음과 같이 써야한다.

public String main2(@RequestParam(name="year" required=true)String year)
=
public String main2(@RequestParam String year)

이 경우에는

https://localhost/ch2/requestParam2 -> 404 에러
https://localhost/ch2/requestParam2?year -> 이 경우는 year ="" 빈문자열

이렇게 404 에러가 발생한다는 것을 알아두자. 왜냐하면 required가 true이기 때문이다.

굳이 기억할 필요는 없고 이렇다는 것만 알아두자

@ModelAttribute

적용대상을 Model의 속성으로 자동 추가해주는 애너테이션이다. 반환 타입또는 컨트롤러 메서드의 매개변수에 적용 가능하다. 이 에너테이션이 있는 대상은 모델에 자동으로 저장된다.
호출과 저장을 안해도 된다는 장점이 있다.

참고사이트
https://donggu1105.tistory.com/14

타입이 참조형일때는 @ModelAttribute이 생략되었다고 생각하고 기본형 String일때는 @RequestParam이 생략되었다고 생각하면 된다.

WebDataBinder

  1. 타입변환
    ex) String으로 받은 값을 int로 저장해주는 경우
  2. 데이터 검증
    만약 day 34를 받으면 int로 전환 되겠지만 day은 31이 최대이므로 이는 걸러져야한다. 이때 데이터검증을 통해서 이를 걸러주며 BindingResult에 저장한다.

그리고 이 결과는 컨트롤러에 넘겨줄 수 있다.

profile
개발취준생

0개의 댓글

관련 채용 정보