Spring MVC 핸들러 메소드 요청 매개변수

Spring Web MVC

백기선님의 강의인 Spring Web MVC 강의를 듣고 공부한 내용을 정리한 글

요청 매개변수

요청 매개변수란 요청을 보낼 때 key,value에 해당하는 데이터를 다음과 같이 쿼리 파라미터로 요청할 수 있다.

/events/{id}?name=harry

또는 Form의 key,value로도 전송할 수 있다.

Spring MVC는 둘 다 요청 매개변수로 간주한다.

@RequestParam

요청 매개변수에 들어있는 단순 타입 데이터를 메소드 아규먼트로 받아올 수 있다.

가령 /events/{id}?name=harry으로 클라이언트가 요청한 쿼리파라미터를 손쉽게 읽어올 수 있다.

String이 아닌 값들은 자동으로 컨버젼을 지원한다.

Map<String,String> 또는 MultiValueMap<String,String>에 사용해서 모든 요청 매개변수를 받아올 수 있다.

사용의 예는 아래와 같다.

@Controller
public class SampleController {
    @GetMapping("/events/{id}")
    @ResponseBody
    public Event getEvent(@RequestParam String name,@MatrixVariable String name) {
        Event event = new Event();
        event.setName(name);
        return event;
    }
}

아래와 같이 생략도 가능하다.

@Controller
public class SampleController {
    @GetMapping("/events/{id}")
    @ResponseBody
    public Event getEvent(String name) {
        Event event = new Event();
        event.setName(name);
        return event;
    }
}

그러나 헷갈릴 수 있어서 생략하는 것을 권장하지않는다고 한다.

기본적으로 @RequestParam 애노테이션이 존재하는 경우라면 클라이언트는 반드시 쿼리 파라미터를 넣어서 요청을 보내야한다.

그렇지 않은 경우 서버측에서 에러를 내는데, 이를 막기 위해 아래와 같이 requried 옵션을 false로 주고, default Value를 줄 수도 있다.

@Controller
public class SampleController {
    @GetMapping("/events/{id}")
    @ResponseBody
    public Event getEvent(@RequestParam(required = false,defaultValue = "name") String name) {
        Event event = new Event();
        event.setName(name);
        return event;
    }
}

Map으로 받고 싶은 경우 아래와 같이 가능하다.

@Controller
public class SampleController {
    @GetMapping("/events")
    @ResponseBody
    public Event getEvent(@RequestParam Map<String,String> params) {
        Event event = new Event();
        event.setName(params.get("name"));
        return event;
    }
}

Reference

인프런 백기선님의 스프링 Web MVC



© 2022. by minkuk

Powered by minkuk