[Spring] Rest API 구현하기

yoon·2024년 1월 10일

spring-boot

목록 보기
4/41
post-thumbnail

✅ HTTP method

  • @RestController @RequestMapping

@RestController // rest api 적용
@RequestMapping("/api") // 주소 매핑
public class RestApiController{
	
}

✔ method mapping

  • @<method>Mapping : method를 지정하고, url을 매핑해주는 역할

✔ annotation

  • @PathVariable
    @GetMapping(path = "/echo/{message}")
    public String echo(
           @PathVariable String message
        ){
            System.out.println(message);
            return message.toUpperCase();
        }


    만약 url에 정의한 이름과 변수 이름이 다르다면

    @PathVariable(name="message") String msg
  • @RequestParam
    required라는 옵션을 줄 수 있다.
    필수 입력 파라미터가 아니라면 (required=false) 옵션을 사용하자
    옵션을 사용하지 않고, 파라미터를 주지않으면 오류가 발생한다
     @GetMapping(path="/book")
        public void queryParam(
                @RequestParam String category,
                @RequestParam(name="issued_day") String issuedDay
        ){
            System.out.println(category);
            System.out.println(issuedDay);
        }


    쿼리파라미터가 많으면 객체로 지정하기

     @GetMapping(path="/book2")
     public void queryParam2(
             //단, 변수 이름의 형식(snake or camel)을 통일해야 한다.
             BookQueryParam bookQueryParam
     ){
         System.out.println(bookQueryParam);
     }


    이때 객체 파일은 다음과 같이 작성할 수 있다.

    @Data // lombok에 포함된 annotation > 변수의 getter, setter 만들어줌
    @AllArgsConstructor // 모든 변수를 포함한 생성자
    @NoArgsConstructor // 디폴트 생성자
    // snake case 형태를 camel case 형태로 읽어올 수 있다.
    @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
    public class UserRequest {
     private String userName;
     private Integer userAge; 
     private String userEmail;
     private Boolean isKorean; 
     @Override
     public String toString() {
         return "UserRequest{" +
                 "userName='" + userName + '\'' +
                 ", userAge=" + userAge +
                 ", userEmail='" + userEmail + '\'' +
                 ", isKorean=" + isKorean +
                 '}';
     }
    }
  • @RequestBody
    @PostMapping("/user")
        public UserRequest userPost(@RequestBody UserRequest userRequest){
            System.out.println(userRequest);
            return userRequest;
        }

✅ Response

  • ResponseEntity : response 객체, status code, header등을 정의할 수 있다.
      @GetMapping("")
       public ResponseEntity user(){
           var user = new UserRequest();
           user.setUserName("hong");
           user.setUserAge(10);
           user.setUserEmail("jj@jj.com");
           log.info("user : {}", user);
           var response = ResponseEntity
                   .status(HttpStatus.OK)
                   .header("x-custom", "hi")
                   .body(user);
           return response;
       }
       ```
profile
하루하루 차근차근🌱

0개의 댓글