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