2019/12/05 - [Back-end/JAVA] - [JAVA] Spring으로 REST API 구현하기 (1) - 프로젝트 생성 및 실행
2019/12/05 - [Back-end/JAVA] - [JAVA] Spring으로 REST API 구현하기 (2) - Interceptor
지난 포스트에서는 secretKey가 없거나 일치하지 않았을 때, 접근을 차단하는 Interceptor를 만들었는데 이번 포스트에서는 유효하지 않은 Request가 요청될 때 처리하는 Error Controller를 다루어 보도록하겠다.
1. Interceptor 생성.
1-1. ErrorInterceptor.java 작성.
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
|
package com.dochi.prj.config.interceptors;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ErrorInterceptor implements ErrorController {
private static final Logger logger = LoggerFactory.getLogger(ErrorInterceptor.class);
static final String ERROR_PATH = "/error";
@Value("${web.path.error}")
String errorPage;
@RequestMapping(value = ERROR_PATH)
public String error(HttpServletRequest request) {
Object errorStatusCode = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
logger.info("ERROR Interceptor: {}",errorStatusCode);
return errorPage+errorStatusCode;
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
}
|
cs |
- 14 ln: ErrorController Interface를 구현.
- 18 ln: 오류가 발생했을 때 받는 URI로 기본값으로 "/error"로 되어있으므로 그대로 작성.
- 20~21 ln: 오류를 Catch했을 때, Redirect할 URI의 Prefix를 설정. application.yml에 "web.ath.error = err/" 추가.
- 24~29 ln: 오류를 Catch했을 때, "err/{errorCode}"로 새로운 URI를 생성하고 Redirect. 여기서 View를 호출할 수 도 있지만, Interceptor처럼 활용하기위해서 Redirect로 처리.
2. Controller 생성.
2-1. ErrorController.java 작성.
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
|
package com.dochi.prj.error;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ErrorController {
private static final Logger logger = LoggerFactory.getLogger(ErrorController.class);
@RequestMapping(value="/err/{errorCode}", method={ RequestMethod.GET, RequestMethod.POST })
@ResponseBody
public String errMessage(@PathVariable("errorCode") String errorCode, HttpServletRequest request) throws Exception {
logger.info("Error Handle... {}", errorCode);
JSONObject jsonObj = new JSONObject();
jsonObj.put("success", false);
jsonObj.put("code", errorCode);
return jsonObj.toString(4);
}
}
|
cs |
- ErrorInterceptor에서 보내는 요청을 처리하는 Controller로 다른 Controller들과 똑같이 작성하면됨.
3. 마치며
- 위와 같이 설정하면 404, 500 등 유효하지않은 Request가 들어왔을 때 처리할 수 있게 된다. errorCode별로 다른 처리를 해보려고 위와같이 구현한 것이므로 소스가 비효율적으로 보인다면 ErrorInterceptor만 구현해도 무방하다.
- 다음 포스트에서는 Controller에서 Exception이 발생했을 때 처리할 수 있는 ExceptionHandler를 만들어 보겠다.
'Back-end > JAVA' 카테고리의 다른 글
[Replace] 확장된 Replace로 첫 글자만 대문자로 치환 (0) | 2020.02.19 |
---|---|
[JAVA] Spring으로 REST API 구현하기 (5) - Filter (0) | 2019.12.11 |
[JAVA] Spring으로 REST API 구현하기 (4) - ControllerAdvice (0) | 2019.12.05 |
[JAVA] Spring으로 REST API 구현하기 (2) - Interceptor (0) | 2019.12.05 |
[JAVA] Spring으로 REST API 구현하기 (1) - 프로젝트 생성 및 실행 (4) | 2019.12.05 |
댓글