본문 바로가기

개발/Spring

스프링 REST API - @ResponseEntity

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