ResponseEntity란
웹 서비스에서는 많은 정보를 송수신하게된다. 각각의 다른 웹 서비스들이 대화하려면 서로 정해진 약속에 맞게 데이터를 가공해서 보내야하는데, 이때 보내는 요청 및 데이터 형식을 HTTP(HyperText Transport Protocol)이라고 한다. 우리는 Spring Framework에서 제공하는 클래스 중 *HttpEntity를 상속받아 구현한 클래스인 ResponseEntity를 활용하여 빠르고 쉽게 규격에 맞는 HTTP응답을 생성할 수 있다.
ResponseEntity는 사용자의 HttpRequest(요청)에 대한 응답(HttpStatus, HttpHeaders, HttpBody)을 포함한다.
*HttpEntity
HTTP요청 또는 응답에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스
public class HttpEntity<T> {
private final HttpHeaders headers;
@Nullable
private final T body;
}
코드 예제
import lombok.Data;
@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;
}
}
Message라는 클래스를 만들어 상태코드, 메세지, 데이터를 담을 필드를 추가한다.
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;
}
}
상태코드로 보낼 몇가지의 예시만 적어놓은 enum을 만든다.
@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);
}
}
이후 Controller를 하나 만들고 id를 통해서 User를 가져온 뒤, Message 클래스를 통해서 StatusCode, ResponseMessage, ResponseData를 담아 클라이언트에게 응답을 보내는 코드를 작성한다.
응답 결과
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] SpringSecurity 비밀번호 암호화 (0) | 2022.03.15 |
---|---|
[Spring] 싱글톤 패턴(Singleton pattern) (0) | 2022.03.11 |
[Spring] 의존성주입(Dependency Injection, DI) (0) | 2022.03.11 |
[Spring] Bean (0) | 2022.03.02 |
[Spring] Annotation (0) | 2022.02.27 |