ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP 요청 메서드 - JSON
    스프링/스프링 MVC 패턴 2023. 2. 14. 16:26
    @Slf4j
    @Controller
    public class RequestBodyJsonController {
    
        private ObjectMapper objectMapper = new ObjectMapper(); // json을 사용하기 위해 만들어야함
    
        @PostMapping("/request-body-json-v1")
        public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException {
            ServletInputStream inputStream = request.getInputStream();
            String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
    
            log.info("messageBody={}", messageBody);
            HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
            log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    
            response.getWriter().write("ok");
        }

    JSON 방식으로 Body를 출력하는 코드인데 이전 게시글에서 한번 정리한 내용이니 위의 코드는 자세한 내용을 생략하도록 하겠다.

     

     

     

    @ResponseBody
    @PostMapping("/request-body-json-v2")
    public String requestBodyJsonV2(@RequestBody String messageBody) throws IOException {
    
        log.info("messageBody={}", messageBody);
        HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);
        log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());
    
        return "ok";
    }

    @RequestBody와 @ResponseBody를 통한 json방식의 Body 출력이다.

     

     

    @ResponseBody
    @PostMapping("/request-body-json-v3")
        public String requestBodyJsonV3(@RequestBody HelloData data) {
            // 여기는 @RequestBody를 생략하면 안됨 (생략하면 @ModelAttribute가 되어버림)
            log.info("username={}, age={}", data.getUsername(), data.getAge());
            return "ok";
        }

    내가 만든 HelloData 객체를 이용해서 만들 수 있고 이 방법을 가장 많이 사용한다.

    @RequestBody를 생략하면 안되는데 그러면 스프링이 자동으로 @ModelAttribute로 인식해버린다.

    쿼리 파라미터를 넣어주는 것이 아니라 Body에 메시지를 입력인데 쿼리 파라미터가 없으니 자동으로 Null 값이 들어가게 된다.

     

     

     

    @ResponseBody
    @PostMapping("/request-body-json-v4")
    public HelloData requestBodyJsonV4(@RequestBody HelloData data) {
        log.info("username={}, age={}", data.getUsername(), data.getAge());
        return data; // ok가 아니라 json 객체를 반환해줌
    }

    return이 data라는 객체로 들어가있다.

    이렇게 된다면 return을 해줄 때 json 형식으로 객체를 반환해준다.

    {"username":"hello""age":"20"}를 입력하면
     
    {
        "username""hello",
        "age"20
    }
    를 반환하게 된다.
Designed by Tistory.