@RequestParam 과 @ModelAttribute

박주현·2023년 1월 27일
0

혼공

목록 보기
13/20

Controller 매개 변수

  • @RequestParam - 기본형 / String형 타입에 사용됨
  • @ModelAttribute - 참조형 타입에 사용됨

참조형일 경우에는 @RequestParam을 못붙임 여러 값이 Binding 되기 때문에 붙을수가 없다.
기본형일 경우에는 Model에 저장할 필요가 없음 ${param.}이런 식으로 바로 쓸수가 있기 때문


@RequestParam

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

public String main(@RequestParam(required=true) int year,
            @RequestParam(required = false) int month,
    		@RequestParam(required=true) int day, Model model)

@RequestParam("param이름", required=false)
required는 param의 필수 여부이다
true면 필수 입력 false면 필수 아님

Controller의 매개변수에서 기본형 타입이거나 String 타입에 아무 애너테이션이 없으면 @RequestParam으로 됨,

public void reqParam(@RequestParam int year)
위와 같이 애너테이션만 있다면 year로 param 이름이 되고 required는 true가 된다

필수 입력이 아닐때 (required=false일때) 기본 값을 지정할수 있다

@RequestParam(required=false, defaultValue="1") int year

위와 같이 기본값을 지정할 수 있음.


@ModelAttribute

적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션
반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능

쉽게 말해 참조형 변수를 Model에 자동 저장 시킴
참조형 변수 타입의 첫글자를 소문자로 변경하여 Model의 Key로 설정하고 value의 주소가 적힘.

//public String main(@ModelAttribute("myDate") MyDate date, Model model) {
    public String main(@ModelAttribute MyDate date, Model model) {  // 위와 같음

반환 타입에 적용된다면 key값을 꼭 적어줘야하고 현재 메서드의 호출 결과를 value에 저장함.

private @ModelAttribute("yoil") char getYoil(MyDate date) {
        return getYoil(date.getYear(), date.getMonth(), date.getDay());
    }

내부 구조는 Controller의 Method중에 @ModelAttribute가 붙어있는게 있는지 찾고 있는 것을 전부 Model에 적음.

참조형 매개변수 앞에 @ModelAttribute는 생략 가능하다 그렇게 되면 아래와 같은 형식으로 적힌걸로 됨.

public String main(@ModelAttribute("myDate") MyDate date, Model model)

WebDataBinder

쿼리스트링으로 값을 받을때 String을 int로 변환을 누가 알아서 해줄까? 라는 의문이 생긴다.
그 역할을 WebDataBinder가 하는데 그 과정은
첫번째로 타입을 변환하고 그 후 데이터 검증(Validation)을 거친다 그리고 그 결과가 Error 이든 정상이든 BindingResult에 저장한다.


Log Level 지정

src/main/resources/log4j.xml
위의 파일에

<logger name="org.springframework.web">
	<level value="info" /> // info가 기본
</logger>
<logger name="org.springframework.web">
	<level value="trace" /> // trace는 에러 추적 log 레벨중 가장 자세함.
</logger>
<logger name="org.springframework.web">
	<level value="debug" /> // debug도 있음.
</logger>

0개의 댓글