Back-end Skill/Springboot

[Springboot] 데이터 인자를 넘겨받는 각기 어노테이션 : 목적으로 다르게 효율적으로 쓰일 수 있는 방법들

Sophie소피 2022. 10. 24. 00:17

 

오늘은  form태그에서 컨트롤러에 인자를 할당하는 어노테이션 3가지에 대해 

간단히 알아보고 실무에서는 어떻게  쓰이는지에 대해 알아보도록 하자. 

 

 

@RequestParam query 처리

  • 전달받은 데이터를 URI상에서 찾는다.
  • Type 1의 URI를 처리할 때 사용한다.
  • GET 방식으로 넘어온 URI의 queryString을 받기 적절하다.
  • @RequestBody로 데이터를 받을 경우 메소드의 파라미터명이 상관 없지만
  • @RequestParam으로 데이터를 받을 때는 데이터를 저장하는 이름으로 메소드의 파라미터명을 설정해줘야 한다.
  • 해당하는 데이터만 받아올 수 있다. (@RequestBody는 객체를 받아옴)
  • ex) http://localhost:8080/receive?name=sophie&age=23

@PathVariable URI 변수 처리

  • URI 경로의 일부를 파라미터로 사용할 때 이용한다.
  • 템플릿 변수의 값을 추출하고 그 값을 메소드 변수에 할당한다.
  • Type 2의 Rest api에서 값을 호출할 때 주로 사용한다.

@RequestBody JSON 처리

  • http 요청의 body에 담긴 값을 자바 객체로 변환한다.
  • 비동기 처리 구현시 @ResponseBody와 함께 사용한다.
  • 일반적인 GET/POST의 요청 파라미터라면 @RequestBody를 사용하지 않아도 된다.
  • xml이나 json 기반의 메시지를 사용하는 요청의 경우 유용하다.
  • ex) http://localhost:8080/receive

게시판의 글을 작성하는 로직을 작성할 때는 어떻게 해야할까? 

글을 작성하는데 필요한 데이터 객체를 전달하기 위한 DTO를 받아서

@Requestbody 로 데이터를 저장하는 servicelmpi로  통채로 전달 해줘야한다.

 

 /** 게시판 글 작성 **/
    @PostMapping("/postBoard")
    fun postBoard(
        @RequestBody dto: BoardRegisterRequestDTO
    ): ResponseEntity<MyResponse<Long?>> {
        val postBoard = boardService.postBoard(dto)

        return getResponse(postBoard)
    }
    
    
    /**BoardRegisterRequestDTO.kt**/
    class BoardRegisterRequestDTO (
    var userId: Long,
    var title: String,
    var content: String,
) {
}

그렇다면 게시글리스트에서 상세글을 볼 때는 데이터를 어떻게 가져와야할까? 

  /**  게시판 상세 **/
    @GetMapping("/detailBoard")
    fun detailBoard(
        @RequestParam board_id: Long
    ): ResponseEntity<MyResponse<BoardDTO>> {
        val boards = boardService.detailBoard(board_id)
        return getResponse(boards)
    }

게시글을 상세조회할 때는   @RequestParam 에 board_id하나로만 넘겨주면 끝이다.

비지니스로직상 pk로 걸려있는 board_id가 어떤 게시글인지 식별할 수 있는 관계이기 때문에 

 @RequestParam board_id로  사용하여 게시글 상세조회를 가능하게 할 수 있다. 

 @RequestParam 사용하게되면 url주소가 예를 들어 

localhost:8080/api/boardDetail?board=7 이렇게  쿼리파라미터 형식으로 나올 것이다. 

 

어노테이션은 우리가 개발을 하기 쉽게 만들어주는 좋은 친구이다. 

하지만 좋다고 무작정 쓰게된다면 그건 위험하다. 

어노테이션의 기능에 대해 명확히 알고 

유리한 쪽으로 비지니스로직을 작성할 줄알아야

진짜 개발자로 거듭날 수 있는거 같다. 

 

알고 쓰는것 이것이 제일 중요한것같다.