본문 바로가기

JAVA

SpringBoot Controller 매개변수 애너테이션의 종류

@RequestParam

HTTP GET 방식으로 전달되는 URL 의 parameter 값을 가져올때 사용됨

http://localhost:8080/student?studentId=1 주소 형식에서의 ? 뒤 parameter 값과 매핑됨

@GetMapping("/student")
public String getStudentId(@RequestParam(name="studentId", required=false, defaultValue="0") int id) {
  return "list";
}


@GetMapping("/student")
public String getStudentId(@RequestParam("studentId") int id) {
  return "list";
}

속성값

name type 설명
value String 파라미터 명
required boolean 파라미터가 필수값인지 여부. 기본값은 true
defaultValue int 값이 넘어오지 않으 경우 default 값

@ModelAttribute

사용자가 요청시 전달하는 값을 오브젝트 형태로 매핑해주는 어노테이션

@RequestParam으로 값을 받을 때 매개변수의 양이 많아질 경우 사용한다.

@Getter
@Setter
public class UserSearchForm {
    private int id;
    private String name;
    private String email;
    private String phone;
}

@RestController
public class TestController {
    @GetMapping("/")
    public String getTestPage(@ModelAttribute UserSearchForm userSearchForm,
                              Model model) {
        List<User> userList = userService.search(userSearchForm);
        model.addAttribute("userList", userList);
        return "test";
    }
}

@RequestBody

POST 요청에 대해 Json(application/json) 형태의 HTTP Body 내용을 Java Object로 변환시켜주는 역할

Body가 존재하지 않는 Get 메소드에 @RequestBody를 활용하려고 한다면 에러가 발생한다.

@RestController
public class OrderRestController {

  @PostMapping("/orders")
    public ApiResponse<String> save(@RequestBody OrderDto orderDto){
        return ApiResponse.ok(orderService.save(orderDto));
    }
}

@ModelAttribute vs @RequestBody

@ModelAttribute는 바인딩시키는 어떤 데이터를 set해주는 Setter함수가 없다면 매핑이 되지 않는다.

하지만 @RequestBody는 요청받은 데이터를MessageConverter를 통해 변환시키는 것이기 때문에, Setter함수가 없어도 값이 매핑이 된다.

@PathVariable

파라미터를 URL 경로에 포함시키는 방법

주로 REST API에서 값을 호출할 때 많이 사용

http:*//localhost:8080/orders/1* 와 같은 형식에서 {}에 매개변수 값을 매핑시킴

@RestController
public class OrderRestController {

    @GetMapping("/orders/{uuid}")
    public ApiResponse<OrderDto> getOne(@PathVariable String uuid) throws NotFoundException {
        return ApiResponse.ok(orderService.findOne(uuid));
    }

}

Reference

https://mangkyu.tistory.com/72

https://jhkang-tech.tistory.com/50

'JAVA' 카테고리의 다른 글

디자인 패턴 - 상태 패턴  (0) 2021.11.18
DAO와 repository의 차이  (0) 2021.09.14
Proxy 객체  (0) 2021.09.07
proxy 패턴  (0) 2021.09.07
디자인 패턴  (0) 2021.08.06