[SPRING] Spring Boot Rest Controller 다른 HTTP 상태 코드를 반환하는 방법은 무엇입니까?
SPRINGSpring Boot Rest Controller 다른 HTTP 상태 코드를 반환하는 방법은 무엇입니까?
간단한 REST API에 Spring Boot를 사용하고 있으며 실패하면 올바른 HTTP 상태 코드를 반환하고 싶습니다.
@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus( HttpStatus.OK )
public RestModel create(@RequestBody String data) {
// code ommitted..
// how do i return a correct status code if something fails?
}
Spring 및 Spring Boot를 처음 사용하는 기본 질문은 문제가 있거나 실패했을 때 어떻게 다른 상태 코드를 반환합니까?
해결법
-
==============================
1.사용할 수있는 몇 가지 옵션이 있습니다. @ControllerAdvice라는 예외를 처리하는 클래스를 사용하는 것이 좋습니다.
사용할 수있는 몇 가지 옵션이 있습니다. @ControllerAdvice라는 예외를 처리하는 클래스를 사용하는 것이 좋습니다.
@ControllerAdvice class GlobalControllerExceptionHandler { @ResponseStatus(HttpStatus.CONFLICT) // 409 @ExceptionHandler(DataIntegrityViolationException.class) public void handleConflict() { // Nothing to do } }
또한 HttpServletResponse를 컨트롤러 메소드에 전달하고 응답 코드를 설정할 수 있습니다.
public RestModel create(@RequestBody String data, HttpServletResponse response) { // code ommitted.. response.setStatus(HttpServletResponse.SC_ACCEPTED); }
자세한 내용은 훌륭한 블로그 게시물을 참조하십시오 : http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
참고 : @ResponseBody 주석을 사용하는 Spring Boot에서는 중복-@RestController에 포함되어 있습니다.
-
==============================
2.이를 수행하는 방법 중 하나는 ResponseEntity를 리턴 오브젝트로 사용할 수 있다는 것입니다.
이를 수행하는 방법 중 하나는 ResponseEntity를 리턴 오브젝트로 사용할 수 있다는 것입니다.
@RequestMapping(value="/rawdata/", method = RequestMethod.PUT) public ResponseEntity<?> create(@RequestBody String data) { if(everything_fine) return new ResponseEntity<>(RestModel, HttpStatus.OK); else return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR); }
-
==============================
3.이 코드를 사용해보십시오 :
이 코드를 사용해보십시오 :
@RequestMapping(value = "/validate", method = RequestMethod.GET, produces = "application/json") public ResponseEntity<ErrorBean> validateUser(@QueryParam("jsonInput") final String jsonInput) { int numberHTTPDesired = 400; ErrorBean responseBean = new ErrorBean(); responseBean.setError("ERROR"); responseBean.setMensaje("Error in validation!"); return new ResponseEntity<ErrorBean>(responseBean, HttpStatus.valueOf(numberHTTPDesired)); }
from https://stackoverflow.com/questions/24292373/spring-boot-rest-controller-how-to-return-different-http-status-codes by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] jUnit 테스트에서 데몬이 아닌 스레드가 종료되는 이유는 무엇입니까? (0) | 2019.09.13 |
---|---|
[SPRING] 스프링 kotlin에 대한 Intellij 문제 해결 종속성 (0) | 2019.09.13 |
[SPRING] 필드를 com.sun.proxy. $ Proxy로 설정할 수 없습니다 (0) | 2019.09.13 |
[SPRING] Spring AOP-setter를 호출하기 전에 오래된 필드 값을 얻습니다. (0) | 2019.09.13 |
[SPRING] 마이크로 서비스에 대한 직접 호출을 허용하지 마십시오. API Gateway를 통해서만 허용 (0) | 2019.09.13 |