반응형
@RestController는 별도의 View를 제공하지 않은 채 데이터를 전달하므로 전달 과정에서 예외가 발생할 수 있습니다.
예외에 대해 좀 더 세밀한 제어가 필요한 경우 ResponseEntity 클래스를 사용하면 됩니다.
예를 들어 모바일 쇼핑몰 앱에 주문자가 몰리면서 서버에 부하가 걸렸습니다.
일정 시간이 지나도 주문이 처리되지 않으면 서버에서 ResponseEntity 클래스에 HTTP 상태 코드를 설정하여 앱으로 전송하도록 합니다.
그러면 앱에서 HTTP 상태 코드를 인식할 수 있는 기능을 이용해 주문 상태나 예외 발생을 알려줍니다.
* 예제를 보고싶으신 분들은 표 밑을 확인하세요
HTTP 상태 코드 표
그룹 | 코드 | 상수 | 설명 |
정보 응답 | 100 | CONTINUE | 상태가 괜찮으며 클라이언트가 계속해서 요청하거나 요청이 완료된 경우에는 무시해도 된다는 정보를 알려줌 |
101 | SWITCHING_PROTOCOL | 클라이언트가 보낸 upgrade 요청 헤더에 대한 응답으로, 서버에서 프로토콜을 변경할 것임을 알려줌 |
|
성공 응답 | 200 | OK | 요청이 성공적으로 완료되었다는 의미 |
201 | CREATED | 요청이 성공적이였으며 그 결과로 새로운 리소스가 생성되었다는 의미 |
|
202 | ACCEPTED | 요청을 수신했지만 그에 응하여 행동할 수 없다는 의미 |
|
리다이렉션 메시지 | 300 | MULTIPLE_CHOICE | 요청에 대해 하나 이상의 응답이 가능하다는 의미 |
301 | MOVED_PERMANENTY | 요청한 리소스의 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 | 서버는 요청을 처리할 준비가 되지 않았다는 의미 |
MemberVO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.myspring.pro29.ex01;
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "MemberVO [id=" + id + ", pwd=" + pwd +
", name=" + name + ", email=" + email + "]";
}
}
|
cs |
TestController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
package com.myspring.pro29.ex01;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test/*")
public class TestController {
static Logger logeer = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/membersList2")
public ResponseEntity<List<MemberVO>> listMembers2(){
List<MemberVO> list = new ArrayList<MemberVO>();
for(int i=0; i<10; i++){
MemberVO vo = new MemberVO();
vo.setId("lee" + i);
vo.setPwd("123" + i);
vo.setName("이순신" + i);
vo.setEmail("lee" + i + "@test.com");
list.add(vo);
}
return new ResponseEntity<List<MemberVO>>(list,HttpStatus.INTERNAL_SERVER_ERROR);
}
}
|
cs |
실행결과
F12를 눌러 확인해 보면 코드에서 Status Code가 우리가 보냈던 500 임을 확인할 수 있다.
반응형
'코딩 기록 > JSP' 카테고리의 다른 글
[JSP] Spring 썸네일 사용하기 (0) | 2021.06.01 |
---|---|
[JSP] Spring 다중 파일 업로드 하기 (2) | 2021.06.01 |
[JSP] @RequestBody와 @Response 사용하기 (0) | 2021.05.28 |
[JSP] @PathVariable 사용하기 (0) | 2021.05.28 |
[JSP] @RestController 이용해 컬렉션 객체 전달하기 (0) | 2021.05.28 |