요청 파라미터 처리

wangjh789·2022년 8월 7일
0

[Spring] 스프링-mvc-1

목록 보기
12/15

@RequestParam

스프링은 파라미터를 컨트롤러로 사용하기 쉽게 넘겨주는 @RequestParam 기능을 가지고 있다.

Required

	@ResponseBody
    @RequestMapping("/request-param-v4")
    public String requestParamRequired(
            @RequestParam(required = false) String username,
            @RequestParam(required = true) int age
    ) {
        log.info("username={} age ={}", username, age);
        return "ok";
    }

위와 같은 경우 username은 필수가 아니지만 age 는 필수이기 때문에 age 파라미터를 넘지기 않는다면 (=null) 400에러를 뱉는다.

만약 username=123&age= 와 같은 경우 age에는 "" 빈문자가 들어와 컨트롤러에서 Integer 파싱에러가 발생한다.

defaultValue

	@ResponseBody
    @RequestMapping("/request-param-v4")
    public String requestParamRequired(
            @RequestParam(required = false) String username,
            @RequestParam(required = true, defaultValue = "-1") int age
    ) {
        log.info("username={} age ={}", username, age);
        return "ok";
    }

다음과 같은 경우 age가 null인 경우, 빈문자인 경우 기본 값으로 대체된다.

Map으로 받기

@RequestParam Map<String,Object> map
@RequestParam MultivalueMap<String,List<Object>> map
이처럼 한번에 map으로 파라미터를 받을 수 있다.

@ModelAttribute


@Data
public class HelloData {
    private String username;
    private int age;
}

	@ResponseBody
    @RequestMapping("/model-attribute-v1")
    public String modelAttributeV1(@ModelAttribute HelloData data) {
        log.info("helloDate = {}", data);
        return "ok";
    }

요청 파라미터의 이름으로 객체의 프로퍼티를 찾는다.
그리고 해당 프로퍼티의 setter를 호출해서 파라미터 값으로 바인딩한다.
만약 자료형이 맞지 않을 경우 바인딩 에러를 발생시킨다.

argumentResolver 로 지정해둔 타입은 바인딩이 되지 않음.

profile
기록

0개의 댓글