[Spring] 스프링 기본 기능 - HTTP 요청

우쓰·2023년 11월 28일
0

Spring

목록 보기
6/6

📙 Content

컨트롤러

@Controller : 컨트롤러 어노테이션에 들어가보면 @Component 어노테이션이 붙어있는 것을 확인할 수 있다.
즉, 컨트롤러 어노테이션이 있다면 스프링 빈에 등록이 되고 컴포넌트 스캔의 대상이 된다.
리턴 타입이 String인 경우 뷰 이름으로 리턴한다.

@RestController : HTTP 메시지 바디에 바로 입력한다.
@ResponseBody@Controller 를 더했다고 생각하면 된다.


HTTP 메서드

GET : 조회할때 주로 사용하는 메소드로 URL의 쿼리 파라미터에 데이터를 포함해서 전달한다
POST : 저장, 등록할때 주로 사용하는 메소드로 메시지 바디에 쿼리 파라미터 형식으로 전달한다.
PATCH : 수정할 때 주로 사용하는 메소드로 메시지 바디에 데이터를 담아 기존 리소스의 일부를 수정한다.
DELETE : 삭제할 때 주로 사용하는 메소드이다


요청 파라미터

@ModelAttribute

: 개발을 할때 파라미터를 받아서 객체를 만들고 해당하는 값을 넣어주어야 한다.
스프링에서는 @ModelAttribute 기능을 제공한다.

@RequestParam : 스프링이 제공하는 어노테이션으로 HTTP 요청 파라미터를 받는다 servlet에서 request.getParameter("parameter") 와 같다.
GET 쿼리스트링, POST Form 둘다 지원한다.
파라미터 이름과 변수명이 같으면 @RequestParam("parameter")에서 ("parameter") 생략 가능하다
String, int, Integer등의 단순 타입에서는 @RequestParam 도 생략 가능하다
하지만 너무 생략을 하면 혼란스러울 수 있다.

필수 파라미터 여부 설정

  @ResponseBody
  @RequestMapping("/request-param-required")
  public String requestParamRequired(
      // 여기서 @RequestParam을 생략 가능
      @RequestParam(required = true) String username,
      @RequestParam(required = false) Integer age
  ) {
    log.info("username={}, age={}", username, age);
    return "ok";
  }

요청 메시지

HTTP message body에 데이터를 직접 담아서 요청하는 경우
주로 JSON 형식으로 요청한다.

요청 파라미터와 다르게 메시지 바디를 통해 데이터가 직접 넘어오는 경우
@RequestParam, @ModelAttribute를 사용하지 못한다.

스프링 내부에서 HTTP 메시지 컨버터(HttpMessageConverter) 기능을 사용하여 메시지 바디를 문자나 객체로 변환해준다.

요청이 JSON 형식일 경우

@RequestBody 를 사용하면 HTTP 메시지 컨버터가 HTTP 메시지 바디의 내용을 우리가 원하는 문자나 객체 등으로 변환해준다.
(요청시 content-type이 application/json인지 확인)

바인딩할 User 클래스

@Getter
@Setter
public class User {

  private String name;
  private Long age;

}
@Controller
@Slf4j
public class MainController {

  @ResponseBody
  @RequestMapping("/model/attribute")
  public String modelAttribute(@RequestBody User user) {
    log.info("name={}, age={}", user.getName(), user.getAge());
    return "OK";
  }
}


POST MAN을 이용하여 JSON으로 해당 경로에 요청할 경우

이렇게 HTTP 메시지 컨버터가 문자 뿐만아니라 JSON타입은 객체로 변환해주는 것을 로그출력 결과를 통해 확인할 수 있다.

0개의 댓글