ResponseEntity - xx10222/selab-todo-list GitHub Wiki

ResponseEntity란?

Spring Framework에서 제공하는 클래스 중 HttpEntity 클래스가 존재한다 이는 HTTP Request 또는 Response에 해당하는 HttpHeader와 HttpBody를 포함하는 클래스이다

public class HttpEntity<T> {

	private final HttpHeaders headers;

	@Nullable
	private final T body;
}
public class RequestEntity<T> extends HttpEntity<T>

public class ResponseEntity<T> extends HttpEntity<T>

HttpEntity 클래스를 상속받아 구현한 클래스가 RequestEntity, ResponseEntity 클래스이다 ResponseEntity는 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스이다 따라서 HttpStatus, HttpHeaders, HttpBody를 포함한다

ResponseEntity의 생성자를 보면 this()를 통해서 매개변수가 3개인 생성자를 호출해 결국엔 아래 보이는 매개변수가 3개인 생성자로 가게 된다

public ResponseEntity(HttpStatus status) {
	this(null, null, status);
}
public ResponseEntity(@Nullable T body, HttpStatus status) {
	this(body, null, status);
}



간단한 예시를 살펴보자!

@RestController
public class SampleController {

    @GetMapping("users")
    public ResponseEntity getAllUsers() {
        return new ResponseEntity(HttpStatus.OK);
    }
}

위와 같이 코드를 짜고 요청을 보내면, 상태 코드가 200으로 오는 것을 확인할 수 있다

image



또한 상태코드(Status), 헤더(headers), 응답 데이터(ResponseData)를 담는 생성자도 존재한다

public class ResponseEntity<T> extends HttpEntity<T> {
	
	public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
		super(body, headers);
		Assert.notNull(status, "HttpStatus must not be null");
		this.status = status;
	}
}

그리고 이제 ResponseEntity를 이용해서 클라이언트에게 응답을 보내는 예제를 정리해보자
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를 담아서 클라이언트에게 응답을 보내는 코드이다


이제 실행을 해보면 다음과 같은 결과를 확인하면 다음과 같다

image


참고)
https://devlog-wjdrbs96.tistory.com/182

⚠️ **GitHub.com Fallback** ⚠️