[Spring] API, RestController, HTTP Status Code Control

홍정완·2022년 3월 23일
0

Spring

목록 보기
7/32
post-thumbnail

RestControlelr


  • Json 형태로 객체 데이터 반환

  • return 값에 자동으로 ResponseBody가 붙어 👉 자바 객체가 매핑되어 전달



@RequestBody@ResponseBody공통점
HTTP 요청의 body 내용을 Java 객체로 변환할 때 사용Java 객체의 내용을 HTTP 요청의 body로 변환할 때 사용1. Web Page와 Java가 통신할 때 객체를 변환하는 역할

2. 비동기 처리 방식이기 때문에 Server와 Client 통신 본문(body)에 데이터를 포함해야 된다.




HTTP Status Code Control



HTTP Status Code를 서버에서 클라이언트로 응답할 때, 가공해서 보낼 수 있다.


  • 서버에서 응답할 때 상태 코드와, 생성된 id 값을 클라이언트에게 전송해 주면 클라이언트가 재전송할 필요가 없어 네트워크 트래픽이 감소



@PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User saveUser = service.save(user);

        URI location = ServletUriComponentsBuilder.fromCurrentRequest() //사용자 요청 uri
                .path("/{id}") // buildAndExpand를 통해 얻은 값이 들어온다
                .buildAndExpand(saveUser.getId()) // {id}에 넣어줄 값
                .toUri(); // URI 생성

        return ResponseEntity.created(location).build(); //서버로부터 적절한 상태 코드를 보내주는 것이 좋은 api
    }



  • ServletUriComponentsBuilder를 통해 적절한 URI를 만들고, 요청한 사용자에게 특정 값을 포함한 URI 전달

HttpEntity



  • 역할 👉 HTTP 프로토콜을 이용하는 통신의 header와 body 관련 정보를 저장할 수 있도록 한다.

  • 이를 상속받은 클래스로 RequestEntity와 ResponseEntity가 있다.
public class RequestEntity<T> extends HttpEntity<T>
public class ResponseEntity<T> extends HttpEntity<T>

즉, HttpHeader와 body의 값들을 하나의 객체로 저장하는 것


  • Request 부분일 경우 RequestEntity

  • Response 부분일 경우 ResponseEntity

    • 개발자가 직접 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스,
      404, 500 ERROR 와 같은 HTTP 상태 코드를 전송하고 싶은 데이터와 함께 전송할 수 있다



profile
습관이 전부다.

0개의 댓글