-
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}를 반환하게 된다.'스프링 > 스프링 MVC 패턴' 카테고리의 다른 글
상품 웹 사이트 - 타임리프 (아이템 목록) (0) 2023.02.16 상품 웹 사이트 - 도메인 개발 (0) 2023.02.16 HTTP 요청 메시지 - 텍스트 (0) 2023.02.14 요청 파라미터 - @RequestParam, @ModelAttribute (0) 2023.02.14 API 요청 매핑 타입 (0) 2023.02.14