728x90
반응형
@ResponseEntity
@RestController 는 별도의 View 를 제공하지 않은 채 데이터를 전달하므로 전달 과정에서 예외가 발생할 수 있습니다.
예외에 대해 좀 더 세밀한 제어가 필요한 경우 @ResponseEntity 클래스를 사용합니다.
쇼핑몰을 예를 들었을 때 주문에 이상이 생겨 일정 시간이 지나도 주문이 처리되지 않으면 서버에서 ResponseEntity 클래스에 HTTP 상태 코드를 설정하여 앱으로 전송하도록 합니다. 그러면 앱에서 HTTP 상태 코드를 인식할 수 있는 기능을 이용해 주문 상태나 예외 발생을 알려줍니다.
[ HTTP 상태 코드 ]
그룹 | 코드 | 상수 | 설명 |
정보 응답 | 100 | CONTINUE | 클라이언트가 계속해서 요청하거나 요청이 완료된 경우에는 무시해도 된다는 정보를 알려줍니다(상태 OK) |
101 | SWITCHING_PROTOCOL | 클라이언트가 보낸 upgrade 요청 헤더에 대한 응답으로 서버에서 프로토콜을 변경할 것임을 알려줍니다. | |
성공 응답 | 200 | OK | 요청이 성공적으로 완료되었다는 의미입니다. |
201 | CREATED | 요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다는 의미입니다. | |
202 | ACCEPTED | 요청을 수신했지만 그에 응하여 행동할 수 없다는 의미입니다. | |
리다이렉션 메시지 | 300 | MULTIPLE_CHOICE | 요청에 대해 하나 이상의 응답이 가능하다는 의미입니다. |
301 | MOVED_PERMANENTLY | 요청한 리소스의 URI 가 변경되었다는 의미입니다. | |
302 | FOUND | 요청한 리소스의 URI 가 일시적으로 변경되었다는 의미입니다. | |
303 | SEE_OTHER | 클라이언트가 요청한 리소스를 다른 URI 에서 GET 요청을 통해 얻어야 할 경우 서버가 클라이언트로 직접 보내는 응답입니다. | |
클라이언트 오류 응답 | 400 | BAD_REQUEST | 잘못된 문법으로 인해 서버가 요청을 이해할 수 없다는 의미입니다. |
401 | UNAUTHORIZED | 인증되지 않았다는 의미입니다. | |
403 | FORBIDDEN | 클라이언트가 콘텐츠에 접근할 권리를 가지고 있지 않다는 의미입니다. | |
404 | NOT_FOUND | 요청 받은 리소스를 찾을 수 없다는 의미입니다. | |
서버 오류 응답 | 500 | INTERNAL_SERVER_ERROR | 처리할 수 없는 내부 오류가 발생했다는 의미입니다. |
501 | NOT_IMPLEMENTED | 요청 메서드는 서버가 지원하지 않거나 처리할 수 없다는 의미입니다. | |
503 | SERVICE_UNAVAILABLE | 서버는 요청을 처리할 준비가 되지 않았다는 의미입니다. |
...
@RestController
@RequestMapping("/test/*")
public class TestController {
static Logger logger = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/membersList")
// 반환 타입을 ResponseEntity 로 설정
public ResponseEntity<List<MemberVO>> listMembers2() {
List<MemberVO> list = new ArrayList<MemberVO>();
for (int i = 0; i < 10; i++) {
MemberVO vo = new MemberVO();
vo.setId("kim" + i);
vo.setPwd("1212" + i);
vo.setName("김철수" + i);
vo.setEmail("kim" + i + "@gmail.com");
list.add(vo);
}
// 요청이 성공적으로 완료됨
return new ResponseEntity(list, HttpStatus.OK);
}
...
ResponseEntity 를 이용하면 JSON 뿐만 아니라 HTML 이나 자바스크립트를 부라우저로 전송할 수 있어 결과 메시지나 오류 메시지를 전송할 때 편리합니다.
...
@RequestMapping(value = "/add")
public ResponseEntity add() {
HttpHeaders responseHeaders = new HttpHeaders();
// 전송할 데이터의 종류와 인코딩 설정
responseHeaders.add("Content-Type", "text/html; charset=utf-8");
// 전달할 자바스크립트 메시지 작성
String message = "<script>";
message += " alert('회원 추가 완료');";
message += " location.href='/test/membersList'; ";
message += " </script>";
// ResponseEntity 를 이용해 HTML 형식으로 데이터 전송
return new ResponseEntity(message, responseHeaders, HttpStatus.CREATED);
}
...
여기까지 임미다.
728x90
'개발 > Spring' 카테고리의 다른 글
이클립스 workspace 변경 방법 (0) | 2022.11.22 |
---|---|
REST API - URI 표현 (0) | 2022.11.18 |
스프링 REST API - @RequestBody & @ResponseBody (0) | 2022.11.18 |
스프링 REST API - @PathVariable (0) | 2022.11.18 |
스프링 REST API - @RestController (0) | 2022.11.18 |
스프링 인터셉터(Interceptor) (0) | 2022.11.18 |
메이븐(Maven) 구성요소 (0) | 2022.11.17 |
스프링 @Autowired (0) | 2022.11.16 |
스프링 애너테이션(Annotation) (0) | 2022.11.16 |
스프링 트랜잭션(Transaction) (0) | 2022.11.16 |