How to throw an exception back in JSON in Spring Boot

前端 未结 6 1363
-上瘾入骨i
-上瘾入骨i 2020-12-29 09:11

I have a Request Mapping -

  @RequestMapping(\"/fetchErrorMessages\")
  public @ResponseBody int fetchErrorMessages(@RequestParam(\"startTime\") String star         


        
6条回答
  •  忘掉有多难
    2020-12-29 09:17

    Suppose you have a custom Exception class NotFoundException and its implementations something like this:

    public class NotFoundException extends Exception {
    
        private int errorCode;
        private String errorMessage;
    
        public NotFoundException(Throwable throwable) {
            super(throwable);
        }
    
        public NotFoundException(String msg, Throwable throwable) {
            super(msg, throwable);
        }
    
        public NotFoundException(String msg) {
            super(msg);
        }
    
        public NotFoundException(String message, int errorCode) {
            super();
            this.errorCode = errorCode;
            this.errorMessage = message;
        }
    
    
        public void setErrorCode(int errorCode) {
            this.errorCode = errorCode;
        }
    
        public int getErrorCode() {
            return errorCode;
        }
    
        public void setErrorMessage(String errorMessage) {
            this.errorMessage = errorMessage;
        }
    
        public String getErrorMessage() {
            return errorMessage;
        }
    
        @Override
        public String toString() {
            return this.errorCode + " : " + this.getErrorMessage();
        }
    }
    

    Now you want to throw some exception from controller. If you throw a exception then you must catch it from a standard Error Handler class, say for example in spring they provide @ControllerAdvice annotation to apply to make a class Standard Error Handler. When it is applied to a class then this spring component (I mean the class you annotated) can catch any exception thrown from controller. But We need to map exception class with proper method. So we defined a method with your exception NotFoundException handler something like below.

    @ControllerAdvice
    public class RestErrorHandler {
    
        @ExceptionHandler(NotFoundException.class)
        @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
        @ResponseBody
        public Object processValidationError(NotFoundException ex) {
            String result = ex.getErrorMessage();
            System.out.println("###########"+result);
            return ex;
        }
    }
    

    You want to sent http status to internal server error(500), so here we used @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR). Since you used Spring-boot so you do not need to make a json string except a simple annotation @ResponseBody can do that for you automagically.

提交回复
热议问题