스프링 - API 요청 ,응답 처리

ForLearn·2022년 10월 31일
0

스프링으로 JSON을 반환하는 API를 만드는 방법은 기존의 쿼리 파라미터를 받아 뷰를 반환하는 방식과는 다르다. HTTP 메시지 바디에 JSON을 입력하는 방법을 사용해야 하는데 HttpEntity를 이용하는 방식과 @ResponseBody를 이용하는 방식이 있다.

HttpEntity를 이용한 방식

HttpEntity는 Http의 헤더와 바디를 편리하게 조회하는 기능을 제공한다. 주로 이를 상속한 RequestEntityResponseEntity를 사용한다.

  • RequestEntity: HttpMethod, url , header, body, type을 생성자 파라미터로 넘길 수 있다
  • ResponseEntity : HTTP 상태 코드 설정 가능, 응답에서 사용

예시

@PostMapping("/request-body")
public HttpEntity<String> requestBodyStringV3(HttpEntity<String> httpEntity) {
	
    String messageBody = httpEntity.getBody();
    
 	log.info("messageBody={}", messageBody);
    
 return new HttpEntity<>("ok");
}

@ResponseBody를 이용한 방식

예시

@ResponseBody
@PostMapping("/request-body")
public String requestBodyStringV4(@RequestBody String messageBody) {
 	log.info("messageBody={}", messageBody);
    
	 return "ok";
}

@ResponseBody 는 응답 결과를 HTTP 메시지 바디에 직접 담아 전달에 준다. @RestControllerController역할에 ResponseBody를 더한 기능을 가진다.

@RequestBody의 경우 HTTP메시지 바디를 조회하는 기능을 제공한다. 만약 헤더의 정보가 필요한 경우 HttpEntity를 이용하거나 @RequestHeader를 이용해야 한다.

JSON 처리

API 통신은 대부분 JSON을 주고 받는 것이다. 클라이언트가 보낸 JSON 객체를 서버에서 JAVA 객체로 역직렬화 해서 받고, 서버에서 클라이언트로 보낼때는 JAVA객체를 직렬화하여 JSON으로 보내야 한다.

JSON과 JAVA 객체를 직렬솨 & 역직렬화 하기 위해서는 ObjectMapper를 사용해야 한다.

  • Java Object → JSON
    • ObjectMapper의 writeValue(파일,객체)를 사용하여 직렬화한다. (Json 파일)
    • Json 문자열의 경우writeValueAsString(객체)를 통해
    • 주의할 점은 JSON으로 직렬화 시킬 클래스에 Getter가 필요하다.
  • JSON → Java Object
    • JSON 파일을 Java 객체로 역직렬화하는 경우 ObjectMapper의 readValue(파일,클래스.class) &readValue(문자열,클래스.class) 메서드를 사용한다.
    • 주의해야할 점은 역직렬화 할 클래스에 기본 생성자가 있어야 한다는 것이다.
    • Jackson 라이브러리의 @JsonCreator 를 이용하는 방법도 있다고 한다.

@RequestBody@ResponseBody를 사용하는 경우 스프링의 메세지 컨버터가 해당 변환을 알아서 해준다.

@ResponseBody와 ResponseEntity

@ResponseBody의 경우 상태코드를 애너테이션 (ex. @ResponseStatus(HttpStatus.OK))을 사용하여 지정하기 때문에 한정적이다. 다양한 상황에서 상태코드를 사용해야 하는 경우 ResponseEntity를 사용하자

Reference

0개의 댓글