SpringBoot에서의 ResponseEntity와 @RequestBody 사용 방법

LeeYulhee·2023년 10월 19일
0

👉 ResponseEntity의 역할


  • Spring에서 HTTP 응답을 표현하는 클래스
  • HTTP 응답의 상태 코드, 헤더 및 본문을 정확하게 제어할 수 있음



👉 200 OK 상태 코드를 return


  • ResponseEntity.ok()
    @PostMapping("/sign")
    public ResponseEntity<Member> sign(@RequestBody Member member) {
        memberService.sign(member);
    
        return ResponseEntity.ok(member);
    }
    • 이 메소드는 HTTP 200 OK 상태 코드와 함께 응답을 생성
    • 괄호 안에 전달되는 객체는 아래와 같이 HTTP 응답 본문에 담김
      {
      	"id": 1,
      	"username": "hello",
      	"password": "1234"
      }
  • ResponseEntity.ok().build()
    @PostMapping("/sign")
    public ResponseEntity<Void> sign(@RequestBody Member member) {
        memberService.sign(member);
    
        return ResponseEntity.ok().build();
    }
    • 본문을 담지 않고 HTTP 200 OK 응답만 보내고자 할 때 사용
  • new ResponseEntity<>(HttpStatus.OK)
    @PostMapping("/sign")
    public ResponseEntity<Void> sign(@RequestBody Member member) {
        memberService.sign(member);
    
        return new ResponseEntity<>(HttpStatus.OK);
    }
    • 본문을 담지 않고 HTTP 200 OK 응답만 보내고자 할 때 사용



👉 @PostMapping에서 @RequestBody를 통해 객체 생성


  • @RequestBody의 역할
    • @RequestBody 어노테이션은 HTTP 요청의 본문(body)을 Java 객체로 변환하기 위해 사용
    • Spring의 HttpMessageConverter가 이 작업을 담당하며, 일반적으로 JSON 형태의 HTTP 요청 본문을 Java 객체로 자동 변환하는데 사용
    • @RequestBody는 HTTP 요청 본문에 포함된 데이터를 해당 메서드의 파라미터 타입으로 변환하는 역할
  • 예시
    {
        "id": 1,
        "name": "John Doe",
        "email": "johndoe@example.com"
    }
    @PostMapping("/sign")
    public ResponseEntity<Member> sign(@RequestBody Member member) {
        // ...
    }
    • 이 메서드가 호출될 때, @RequestBody 어노테이션은 전송된 JSON 데이터를 Member 클래스의 인스턴스로 자동 변환
    • 이를 가능하게 하는 것은 주로 Jackson 라이브러리와 같은 JSON 파싱 라이브러리가 Spring에 통합되어 있기 때문



👉 404 Not Found 상태 코드를 return


  • ResponseEntity.notFound().build()
    @GetMapping("/members/{id}")
    public ResponseEntity<Member> findById(@PathVariable Long id) {
    
        Member currentMember = memberService.findById(id);
    
        if (currentMember == null){
            return ResponseEntity.notFound().build();
        }
    
        return ResponseEntity.ok(currentMember);
    }
    • HTTP 404 Not Found 응답을 보내고자 할 때 사용
      • 보통 404 Not Found 응답에서는 별도의 본문을 보내지 않음



👉 ResponseEntity에 List나 Map 등을 담아서 return


  • Map을 담아서 return
    @GetMapping("/allMembers")
        public ResponseEntity<Map<String, Object>> allMembers(){
            List<Member> allMembers = memberService.findAll();
    
            Map<String, Object> result = new HashMap<>();
            result.put("members", allMembers);
    
            return ResponseEntity.ok(allMembers);
        }
    • Map으로 return하면 아래와 같이 응답 본문에 항목을 지정해서 담을 수 있음
      {
      	"members": [
      		{
      		    "id": 1,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		},
      		{
      		    "id": 2,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		},
      		{
      		    "id": 3,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		}
      	]
      }
  • List를 담아서 return
    @GetMapping("/allMembers")
        public ResponseEntity<List<Member>> allMembers(){
            List<Member> allMembers = memberService.findAll();
    
            return ResponseEntity.ok(allMembers);
        }
    • List 그대로 return하면 아래와 같이 응답 본문에 그대로 담김
      [
      		{
      		    "id": 1,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		},
      		{
      		    "id": 2,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		},
      		{
      		    "id": 3,
      		    "name": "John Doe",
      		    "email": "johndoe@example.com"
      		}
      ]
profile
공부 중인 신입 백엔드 개발자입니다

0개의 댓글