프레임워크/Spring

[Spring] Parameter에서 데이터 가져오기 @RequestParam

멍토 2021. 4. 22.

우리가 클라이언트에게 데이터를 받는 방법이 여러개가 있는데 이번에는 Parameter를 이용하여 데이터를 가져오는 방법을 정리했다.

Parameter로 데이터를 보내는 방법은 URL 뒤에 ?name=mungto 이러한 방식이다.

Spring에서 처리하는 방법은 사용방법은 아래와 같다.

@GetMapping(path = "/message")
public ResponseEntity<String> messageForParam(@RequestParam("name") String name) {
    ...
}

변수명과 parameter이름이 같다면 괄호안에 내용은 생략이 가능하다.

@GetMapping(path = "/message")
public ResponseEntity<String> messageForParam(@RequestParam String name) {
    ...
}

물론 위와 같이 사용하면 클라이언트가 데이터를 입력하지 않아서 Parameter가 null로 들어올 수 있다.

이때 우리는 해당 데이터가 무조건 필요하다면 아래와 같은 방식으로 강제가 가능하다.

@GetMapping(path = "/message", params = "name")
public ResponseEntity<String> messageForParam(@RequestParam String name) {
    ...
}

위와 같이 강제를 했다면 400 BAD Response가 날라오게 된다.

추가적인 기능으로는 특정 파라미터가 특정 데이터인지 확인 할 수 있다.

@GetMapping(path = "/message", params = "name=mungto")
public ResponseEntity<String> messageForParam(@RequestParam String name) {
    ...
}

이때는 ''?name=mungto' 가 아니라면 에러가 발생한다.

그런데 나는 여기서 특정 파라미터 값을 강제하는 것이 과연 유용한 것인지? 고민을 했다.

생각난 것은 2가지 였다.

  1. 파라미터로 분기처리
  2. pattern 적용

만약 파라미터에 따라서 분기를 조절한다면 아래와 같이 사용할 수 있을 것이다. (과연 이것이 올바른 지는 모르겠지만?)

@GetMapping(path = "/message", params = "name=mungto")
public ResponseEntity<String> messageForParam(@RequestParam String name) {
    ...
}

@GetMapping(path = "/message", params = "name=brown")
public ResponseEntity<String> messageForParam1(@RequestParam String name) {
    ...
}

여기서 과연 uri patterns도 적용되나? 하고 시도를 해보았다.

@GetMapping(path = "/message", params = "name=mung**")
public ResponseEntity<String> messageForParam(@RequestParam String name) {
    ...
}

안된다 ㅎㅎ..

출처 : https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestmapping-params-and-headers

댓글

💲 광고입니다.