ResponseEntity

sseongeun·2024년 4월 11일

스프링

목록 보기
3/13

📌 ResponseEntity란?

1) 스프링 프레임워크가 제공해주는 클래스임!

import org.springframework.http.ResponseEntity;

-> 따라서 우리가 따로 작성할 필요없이 가져다가 쓰면된다

2) HttpEntity 클래스를 상속받아 구현한 클래스이다.

public class ResponseEntity<T> extends HttpEntity<T>;

✔️ ResponseEntity를 사용하는 이유

  • 전체 HTTP 응답 (바디 + 헤더 + 상태코드)를 캡슐화하여 클라이언트에게 응답을 보내줄 수 있음
    -> api return type을 ResponseEntity로 설정하면 되는것!

✔️ 그렇다면 HttpEntity 클래스란?

  • HTTP 헤더(header)+ 본문(body)를 캡슐화함
HttpEntity<String>entity=new HttpEntity<>(requestBody,headers);

📌 ResponseEntity의 사용 방법

@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable String id) {
    User user = userService.findById(id);
    if (user != null) { // 해당 id를 가지는 User가 존재하는 경우
        return ResponseEntity.ok(user); //user는 JSON형태임
    } else {  // 존재하지 않는 경우
        return ResponseEntity.notFound().build();
    }
}  

✅ SuccessReponse (성공 응답)
방법 1) ResponseEntity.ok(데이터);
방법 2) ResponseEntity.status(HttpStatus.OK).body(데이터);

✅ FailReponse (실패 응답)
* ResponseEntity.status(HttpStatus.ERROR_STATUS).body(errordetails);


ResponseEntity에 특정 SuccessResponse를 넣어 보내고 싶은 경우

  • SuccessResponse의 json
{
  "success":true,
  "message": "회원 정보 조회가 완료되었습니다.",
  "data":{
    "id":1,
    "email":"google@gmail.com"
  },
  "timestamp":"2023-04-23T01:45:23Z"
}
  • API 코드
@RestController
public class MemberApi{
	@GetMapping('/getUser')
    public ResponseEntity<Map<String,Object>> getUser{
    	Map<String,Object> response=new HashMap<>;
        Map<String,Object> userData=new HashMap<>;
        //
        userData.put("id",1);
        userData.put("email","google@gmail.com");
        //
        response.put("success",true);
        response.put("message","회원 정보 조회가 완료되었습니다.");
        response.put("data",userData);
        response.put("timestamp","2023-04-23T01:45:23Z")
        //
        return ResponseEntity.ok(response);
}       
  • 또다른 예시 코드
@GetMapping("boardList")
public ResponseEntity<Message> BoardList(@RequestBody BoardDto boardDto){
	Message message=new Message();
    HttpHeaders headers=new HttpHeaders();
    logger.info("boardList 진입");
    try{
    	message.setStatus(StatusEnum.OK);
        message.setMessage("boardList 성공")
        message.setData(boardDto);
    } catch(Exception e){
    	logger.error("boardList"+e.getMessage(),e);
    }
    return new ResponseEntity<Message>(message,headers,HttpStatus.OK);
}
c.f) Generic 문법 관련
* ResponseEntity<클래스명>
* return new ResponseEntity<클래스명>(body,headers,HttpStatus.OK);
-> <>에 들어가는 클래스명은 body의 클래스를 의미한다!

📌 ResponseEntity의 상태코드는 필수 + 헤더와 바디는 선택!

1) 상태 코드만 반환하는 경우

return new ResponseEntity<>(HttpStatus.OK);

또는

return ResponseEntity.ok()

2) 모두 반환하는 경우 (상태코드+헤더+바디)

return ResponseEntity.status(HttpStatus.valueOf(errorReason.getStatus())).body(errorRespose);
profile
공부 기록...

0개의 댓글