개발/Spring, Spring Data JPA, Querydsl

Spring - RequestBodyJsonController

잇(IT) 2023. 6. 16. 17:00
728x90
@Slf4j
@Controller
public class RequestBodyJsonController {

    private ObjectMapper objectMapper = new ObjectMapper();

    @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");
    }
}
  1. @Slf4j: Lombok 어노테이션으로 로깅을 위한 Logger 객체를 자동으로 생성합니다.
  2. @Controller: 해당 클래스를 스프링 MVC의 컨트롤러로 등록합니다.
  3. private ObjectMapper objectMapper = new ObjectMapper();: Jackson 라이브러리의 ObjectMapper 객체를 생성합니다. 이 객체는 JSON 데이터를 자바 객체로 변환하거나 자바 객체를 JSON으로 변환하는데 사용됩니다.
  4. @PostMapping("/request-body-json-v1"): HTTP POST 요청이 "/request-body-json-v1" 경로로 들어왔을 때 해당 메서드를 실행합니다.
  5. public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws IOException: 메서드의 매개변수로 HttpServletRequest와 HttpServletResponse를 받습니다. 이를 통해 요청과 응답을 처리할 수 있습니다.
  6. ServletInputStream inputStream = request.getInputStream();: 요청의 본문을 읽기 위해 ServletInputStream을 얻어옵니다.
  7. String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);: InputStream에서 본문을 문자열로 읽어옵니다.
  8. log.info("messageBody={}", messageBody);: 로그를 출력하여 받은 본문을 확인합니다.
  9. HelloData helloData = objectMapper.readValue(messageBody, HelloData.class);: Jackson의 ObjectMapper를 사용하여 JSON 문자열을 HelloData 클래스의 객체로 변환합니다.
  10. log.info("username={}, age={}", helloData.getUsername(), helloData.getAge());: 변환된 객체의 값을 로그로 출력합니다.
  11. response.getWriter().write("ok");: 응답으로 "ok" 문자열을 전송합니다.

따라서, 이 코드는 HTTP POST 요청의 본문에 있는 JSON 데이터를 읽어 HelloData 객체로 변환하고, 변환된 객체의 값을 로그로 출력한 뒤 "ok" 문자열을 응답으로 전송합니다.

728x90