@RestController
의 한계
@RestController는 결과로 view를 제공하지 않기때문에 에러 발생유무를 확인할 수 없다.
이때 사용할 수 있는 것이 웹 HTTP 상태 코드
이다.
HTTP 상태코드
구분 |
코드 |
설명 |
100번대 |
|
현재 데이터의 처리중인 상태 |
|
100 |
데이터의 일부만 서버가 받은 경우 |
200번대 |
|
정상적인 응답상태 |
|
200 |
에러가 없이 정상처리된 경우 |
|
204 |
정상처리가 되었으나 서버에 전달할 값이 없는 경우 |
300번대 |
|
다른 URL을 처리하는 상태 |
|
301 |
요청된 페이지가 새 URL로 변경된 경우 |
|
304 |
이미 기존의 데이터와 변경이 없는 경우 |
400번대 |
|
서버에서 인식불가한 상태 |
|
400 |
전송된 Request객체에 문제가 있어 서버가 인지하지 못하는 경우 |
|
403 |
서버에서 허락되지 않는 경우(서버에 접근권한이 없는 경우) |
|
404 |
URL에 해당하는 자원을 찾을 수 없는 경우 |
|
406 |
전송방식의 오류 발생한 경우(주로 REST작동시 발생) |
500번대 |
|
서버 내부의 문제가 발생한 상태 |
|
500 |
서버에서 처리시 문제가 발생한 경우 |
|
502 |
게이트웨이, 프록시에 문제가 발생한 경우(=과부화, 개발자의 영역이 아니라 엔지니어의 영역임) |
|
503 |
일시적인 과부화 상태인 경우, 서비스 중단상태인 경우(개발자의 영역이 아니라 엔지니어의 영역임) |
|
504 |
지정된 처리시간이 지나서 처리를 못하는 경우 |
ResponseEntity 타입클래스
- HTTP 상태코드를 활용하여 상태처리를 할 수 있다.
- @RestController사용하지 않고 일반컨트롤러에서도 @ResponseBody을 통해서 rest로 처리가능하다.
- ResponseEntity를 사용하면 단순한 객체 정보도 JSON형태로 전달가능하지만, HTML 정보와 JS정보까지 전달할 수 있다.(예를 들어 Header정보)
- 이를 통해 결과확인 및 오류메세지 체크가 가능해진다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| @RestController @RequestMapping(value = "/test/*") public class TestController {
@RequestMapping(value = "res2") public ResponseEntity res2() { System.out.println("res2 메서드 호출"); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.add("Content-type", "text/html; charset=UTF-8"); String msg = "<script>"; msg += "alert('얼럿창테스트');"; msg += "location.href='/res1';"; msg += "</script>"; return new ResponseEntity(msg,responseHeaders, HttpStatus.INTERNAL_SERVER_ERROR); } }
|