[Spring] @RequestBody vs @ResponseBody

null·2023년 4월 3일
0

Spring

목록 보기
2/7

@RequestBody

  • HTTP요청 본문(body) 데이터 JSON을 JAVA 객체(VO)에 맵핑하는 스프링 어노테이션

  • dataVO.setName(request.getParameter("name"));
    : 직접 request.getParameter("name") 작성하여 파라미터를 추출 or 직접 파싱을 수행하지 않아도 된다

  • @RequestBody가 붙은 파라미터가 있으면 HTTP 요청의 미디어 타입과 파라미터의 타입을 먼저 확인해야 한다
    : 다양한 미디어 타입( JSON, XML, multipart/form-data 등)으로 전송 될수 있기 때문에 어떤 방식으로 파싱해야하는지 결정해야 한다
    : 어노테이션으로 지정된 파라미터의 타입을 먼저 확인하여, 해당 타입으로 데이터를 변환할 수 있는지 확인해야 한다

  • 해당 미디어 타입과 파라미터 타입을 처리할 수 있다면, HTTP 요청의 본문 부분(Body)을 통째로 변환해서 지정된 메소드 파라미터로 전달해준다


POST /users HTTP/1.1
Content-Type: application/json

{
  "id": 1,
  "name": "John Doe",
  "email": "johndoe@example.com"
}
---------------------------------------

@PostMapping("/users")
public User createUser(@RequestBody User user) {
   // 요청 본문에서 전달된 User 객체를 사용하여 새로운 사용자를 생성
}

@ResponseBody

  • JAVA 객체(VO)를 HTTP 응답의 본문(body) 데이터로 매핑하는 스프링 어노테이션

  • HTTP 응답 본문에 직접 작성되기 때문에, 반환값은 반드시 HTTP 응답 본문에 작성 가능한 데이터 타입이어야 한다

  • 기본적으로 Jackson 라이브러리를 사용하여 객체를 JSON 형식으로 변환하여 반환

  • 객체의 필드명이 JSON 형식의 Key 값, 필드의 값이 JSON 형식의 Value 값
    : 따라서 반환되는 객체는 반드시 JSON 형식으로 변환이 가능한 객체여야 한다

 
@Controller
public class MyController {

    @GetMapping("/user")
    @ResponseBody
    public User getUser() {
        User user = new User();
        user.setId(1);
        user.setName("John");
        return user;
    }
}
--------------------------------------
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "name": "John",
}

0개의 댓글