21일차
Spring MVC의 Controller로 사용단순화 시켜주는 어노테이션Spring에서 Controller 중 View로 응답하지 않는 Controller를 의미method의 반환 결과를 JSON 형태로 반환view return이 주목적API와 view를 동시에 사용하는 경우에 사용API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환data return이 주목적view가 필요없는 API만 지원하는 서비스에서 사용한다.@RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.즉, @RestController = @Controller + @ResponseBody
URL을 어떤 method가 처리할 지 매핑해주는 어노테이션Controller나 Controller의 메소드에 적용GET/POST/PUT/PATCH/DELETE를 정의하기도 함 (정의하지 않으면 자동적으로 GET으로 설정)@RequestMapping("/")
public String index(Model model) {
model.addAttribute("list", bannerService.listAll());
return "index";
}
@GetMapping("/hello")
public String hello() {
return "Hello World!!";
}
view에서 전달해주는 파라미터를 Class(VO/DTO)의 멤버 변수로 binding 해주는 어노테이션<input name="id" /> 처럼 어떤 태그의 name값이 해당 Class의 멤버 변수명과 일치하고 setmethod명도 일치해야함Class나 model로 매핑하기 위한 어노테이션POST나 PUT, PATCH로 요청을 받을때 Request로 넘어온 body값들을 자바타입으로 파싱HTTP POST 요청에 대해 request body에 있는 request message에서 값을 얻어와 매핑RequestData를 바로 Model이나 클래스로 매핑JSON 이나 XML같은 데이터를 적절한 messageConverter로 읽을 때 사용하거나 POJO 형태의 데이터 전체로 받는 경우에 사용@PostMapping("/api/posts")
public PostResponseDto createPost(@RequestBody PostRequestDto requestDto) {
return postService.createPost(requestDto);
}
http://localhost:8080/home?user_id=rara.log@GetMapping("/account")
public List<AccountInfo> getAccountByUserId ( @RequestParam("user_id") Long userId) {
return accountService.getAccountByUserId(userId)
.stream().map(AccountDto -> AccountInfo.builder()
.accountNumber(AccountDto.getAccountNumber())
.balance(AccountDto.getBalance())
.build()).collect(Collectors.toList());
}
http://localhost:8080/api/posts/1@GetMapping("/api/posts/{id}")
public PostResponseDto getPost(@PathVariable Long id) {
return postService.getPost(id);
}
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor