복붙노트

[SPRING] Spring Boot Rest Controller 다른 HTTP 상태 코드를 반환하는 방법은 무엇입니까?

SPRING

Spring 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. ==============================

    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. ==============================

    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. ==============================

    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));
    }
    
  4. from https://stackoverflow.com/questions/24292373/spring-boot-rest-controller-how-to-return-different-http-status-codes by cc-by-sa and MIT license