반응형

@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 임을 확인할 수 있다.

반응형

+ Recent posts