EFUB_세션_Week5

Song Chae Won·2023년 4월 12일
0

EFUB_정리

목록 보기
1/4
post-thumbnail

Spring MVC 자주 사용되는 어노테이션

@Controller

  • @Controller: 스프링에서 컨트롤러 레이어에 있는 객체임을 표시. 스프링 빈에 컨트롤러로서 등록.
  • @RestController: REST 방식의 컨트롤러임을 명시
    - @Controller와 @ResponseBody의 기능을 동시에 사용하게 된다
    ➡️ 해당 컨트롤러가 리턴하는 객체는 JSON 형태로 전달됨
  • @ResponseBody: 컨트롤러 내부의 메소드에서 반환하는 객체들을 JSON 형태로 변환
  • @RequestMapping: 특정한 URL 패턴에 맞는 컨트롤러인지 명시, 컨트롤러의 url 상세 주소를 작성한다

@Rest && @RequestMapping

  • @GetMapping, @PostMapping, @DeleteMapping, @PutMapping: HTTP 전송 방식에 따라, 해당 메소드의 방식을 지정하는 경우에 사용
  • @ResponseStatus: 반환하는 객체의 HTTP 응답의 상태 코드를 설정
  • @RequestMapping: GET/POST 방식 모두를 지원하는 경우에 사용
  • @ResponseBody: REST 방식에서 사용

@Prameters

  • @RequestParam: Request에 있는 특정한 이름의 데이터를 파라미터로 받아서 처리하는 경우에 사용
  • @PathVariable: Request에 있는 특정한 이름의 데이터를 파라미터로 받아서 처리하는 경우에 사용
  • @RequestBody: HTTP 요청이 JSON임을 명시

⭐ Account CRUD

🔻계정생성 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 CRUD

🔻게시글 작성 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 반복문 대신 Java 8의 Stream API를 이용

🔻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>로 변환
profile
@chhaewxn

0개의 댓글