@RequestBody는 클라이언트가 전송하는 JSON 형태의 HTTP Body를 Java 객체로 변환 시켜주는 역할을 한다.
값을 주입하지 않고 값을 변환 시키므로, 변수들의 생성자, Getter, Setter가 없어도 정상적으로 할당된다.
@PostMapping("/api/v1/styles")
public ApiResponse<?> save(@RequestBody @Valid SaveStyleRequest request) {
// TODO: member 작업 이후 argument resolver로 받기
Long memberId = 1L;
UpsertStyleParam param = request.toParam(memberId);
styleService.save(param);
return ApiResponse.of(ReturnCode.SUCCESS);
}
클라이언트측에서 넘어오는 JSON 형식의 데이터를 SaveStyleRequest
객체로 변환시켜주는 역할을 한다.
@RequestParam은 1개의 HTTP 요청 파라미터를 받기 위해서 사용한다.
@RequestParam은 필수 여부가 true이기 때문에 반드시 해당 파라미터가 전송되어야 하며, 파라미터가 전송되지않으면 400에러가 발생한다.
반드시 필요한 값이 아니라면 required false로 설정해주면 되고, defaultValue 옵션을 사용하면 기본값 역시 지정할 수 있다.
@ResponseBody
@RequestMapping("/request-param-v1")
public String requestParamV2(
@RequestParam("username") String memberName,
@RequestParam("age") int memberAge) {
log.info("username={}, age={}", memberName, memberAge);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-v2")
public String requestParamV3(
@RequestParam String username,
@RequestParam int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
@ResponseBody
@RequestMapping("/request-param-v3")
public String requestParamV4(String username, int age) {
log.info("username={}, age={}", username, age);
return "ok";
}
@ModelAttribute는 클라이언트가 전송하는 폼(form) 형태의 HTTP Body와 요청 파라미터들을 생성자나 Setter로 바인딩하기 위해 사용된다.
@ModelAttribute에는 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지 등을 포함한 다양한 검증작업이 진행된다.
@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";
}
}