스프링/스프링 MVC 패턴
HTTP 요청 메서드 - JSON
chanhee01
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
}
를 반환하게 된다.