How return error message in spring mvc @Controller

前端 未结 4 1950
一向
一向 2020-12-23 02:17

I am using methods like this

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity getUser(@RequestHeader(value=\"Access-ke         


        
4条回答
  •  忘掉有多难
    2020-12-23 02:26

    Here is an alternative. Create a generic exception that takes a status code and a message. Then create an exception handler. Use the exception handler to retrieve the information out of the exception and return to the caller of the service.

    http://javaninja.net/2016/06/throwing-exceptions-messages-spring-mvc-controller/

    public class ResourceException extends RuntimeException {
    
        private HttpStatus httpStatus = HttpStatus.INTERNAL_SERVER_ERROR;
    
        public HttpStatus getHttpStatus() {
            return httpStatus;
        }
    
        /**
         * Constructs a new runtime exception with the specified detail message.
         * The cause is not initialized, and may subsequently be initialized by a
         * call to {@link #initCause}.
         * @param message the detail message. The detail message is saved for later retrieval by the {@link #getMessage()}
         *                method.
         */
        public ResourceException(HttpStatus httpStatus, String message) {
            super(message);
            this.httpStatus = httpStatus;
        }
    }
    

    Then use an exception handler to retrieve the information and return it to the service caller.

    @ControllerAdvice
    public class ExceptionHandlerAdvice { 
    
        @ExceptionHandler(ResourceException.class)
        public ResponseEntity handleException(ResourceException e) {
            // log exception 
            return ResponseEntity.status(e.getHttpStatus()).body(e.getMessage());
        }         
    } 
    

    Then create an exception when you need to.

    throw new ResourceException(HttpStatus.NOT_FOUND, "We were unable to find the specified resource.");
    

提交回复
热议问题