TIL

[TIL] 20240202 Spring ResponseEntity

yjyj0101 2024. 2. 2. 22:39

1. ResponseEntity란?

  • Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재
  • HTTP 요청(Request) 또는 응답(Response)에 해당하는 HttpStatus, HttpHeader와 HttpBody를 포함하는 클래스
  • ResponseEntity 는 status field를 가지기 때문에 상태코드는 필수적으로 리턴해야함
@RestController
public class UserController {
    private UserDaoService userDaoService;

    public UserController(UserDaoService userDaoService) {
        this.userDaoService = userDaoService;
    }

    @GetMapping(value = "/user/{id}")
    public ResponseEntity<Message> findById(@PathVariable int id) {
        User user = userDaoService.findOne(id);
        Message message = new Message();
        HttpHeaders headers= new HttpHeaders();
        headers.setContentType(new MediaType("application", "json", Charset.forName("UTF-8")));

        message.setStatus(StatusEnum.OK);
        message.setMessage("성공 코드");
        message.setData(user);

        return new ResponseEntity<>(message, headers, HttpStatus.OK);
    }


}

 

 

@Data
public class Message {

    private StatusEnum status;
    private String message;
    private Object data;

    public Message() {
        this.status = StatusEnum.BAD_REQUEST;
        this.data = null;
        this.message = null;
    }
}

 

public enum StatusEnum {

    OK(200, "OK"),
    BAD_REQUEST(400, "BAD_REQUEST"),
    NOT_FOUND(404, "NOT_FOUND"),
    INTERNAL_SERER_ERROR(500, "INTERNAL_SERVER_ERROR");

    int statusCode;
    String code;

    StatusEnum(int statusCode, String code) {
        this.statusCode = statusCode;
        this.code = code;
    }
}

 

 

2. ResponseEntity 응용

  •  List와 Map 등 다양한 객체들을 담아서 전달이 가능
  •  Body에 응답을 위한 별도의 클래스를 제작하여 사용하면 정해진 규약에 따라 데이터를 전달할 수 있는 장점

 

개선버전

 

 

 

 

 

출처 : https://devlog-wjdrbs96.tistory.com/182, https://hyeonic.tistory.com/197