@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
'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 |