스프링/스프링 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
}
를 반환하게 된다.