@Controller
: 스프링에서 컨트롤러 레이어에 있는 객체임을 표시. 스프링 빈에 컨트롤러로서 등록.@RestController
: REST 방식의 컨트롤러임을 명시@ResponseBody
: 컨트롤러 내부의 메소드에서 반환하는 객체들을 JSON 형태로 변환@RequestMapping
: 특정한 URL 패턴에 맞는 컨트롤러인지 명시, 컨트롤러의 url 상세 주소를 작성한다@GetMapping
, @PostMapping
, @DeleteMapping
, @PutMapping
: HTTP 전송 방식에 따라, 해당 메소드의 방식을 지정하는 경우에 사용@ResponseStatus
: 반환하는 객체의 HTTP 응답의 상태 코드를 설정@RequestMapping
: GET/POST 방식 모두를 지원하는 경우에 사용@ResponseBody
: REST 방식에서 사용@RequestParam
: Request에 있는 특정한 이름의 데이터를 파라미터로 받아서 처리하는 경우에 사용@PathVariable
: Request에 있는 특정한 이름의 데이터를 파라미터로 받아서 처리하는 경우에 사용@RequestBody
: HTTP 요청이 JSON임을 명시🔻계정생성 POST
http://localhost:8080/accounts
🔻계정조회 GET
http://localhost:8080/accounts/3
🔻계정수정 PATCH
http://localhost:8080/accounts/profile/3
🔻계정삭제 PATCH
http://localhost:8080/accounts/3
🔻게시글 작성 POST
http://localhost:8080/posts
🔻게시글 조회_전체 GET
http://localhost:8080/posts
🔻게시글 조회_1개 GET
http://localhost:8080/posts/4
🔻게시글 수정 PUT
http://localhost:8080/posts/4
➕ 여기서 modifiedDate에 NULL이라고 뜬다.
: modifiedDate가 null로 뜨는 문제 ➡️ Service 클래스에서 메소드 위에 @transactional
을 붙여서 해결, Service 클래스에서 @Transactional
을 붙이면 클래스에 있는 모든 메소드에 적용된다!
🔻게시글 삭제 DELETE
http://localhost:8080/posts/4?accountId=3
@DeleteMapping("/{postId}") @ResponseStatus(value = HttpStatus.OK) public String postRemove(@PathVariable Long postId, @RequestParam Long accountId){ postService.removePost(postId, accountId); return "성공적으로 삭제되었습니다."; }
RequestParam
의 대상 변수(여기서는 accountId)는 맵핑하는 url에 적지 않아야한다.("/{postId}/{accountId}"라고 쓰면 안됨)
이 부분이 헷갈려서 많이 헤맸다 😭
🔻for 반복문
for (Post post : postList) {
responseDtoList.add(new PostResponseDto(post));
}
🔻Stream API
responseDtoList = postList.stream()
.map(PostResponseDto::new)// map메소드는 Post 객체를 PostResponseDto 객체로 변환하기 위해 클래스의 생성자 사용
.collect(Collectors.toList()); // collect메소드는 List<PostResponseDto>로 변환