springboot springmvc抛出全局异常的解决方法
springboot中抛出异常,springboot自带的是springmvc框架,这个就不多说了。
springmvc统一异常解决方法这里要说明的是。只是结合了springboot的使用而已。直接上代码,有效有用的才是ok。
1.定义异常捕获
packagecom.example.rest.error;
importorg.springframework.http.HttpStatus;
importorg.springframework.web.bind.annotation.ExceptionHandler;
importorg.springframework.web.bind.annotation.ResponseStatus;
importorg.springframework.web.bind.annotation.RestControllerAdvice;
importorg.springframework.web.servlet.NoHandlerFoundException;
importjavax.validation.ConstraintViolationException;
/**
*
*@authorming定义全局异常处理
*@RestControllerAdvice是@controlleradvice与@ResponseBody的组合注解
*/
@RestControllerAdvice
publicclassGlobalControllerExceptionHandler{
@ExceptionHandler(value={ConstraintViolationException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
publicApiErrorResponseconstraintViolationException(ConstraintViolationExceptionex){
returnnewApiErrorResponse(500,5001,ex.getMessage());
}
@ExceptionHandler(value={IllegalArgumentException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
publicApiErrorResponseIllegalArgumentException(IllegalArgumentExceptionex){
returnnewApiErrorResponse(501,5002,ex.getMessage());
}
@ExceptionHandler(value={NoHandlerFoundException.class})
@ResponseStatus(HttpStatus.NOT_FOUND)
publicApiErrorResponsenoHandlerFoundException(Exceptionex){
returnnewApiErrorResponse(404,4041,ex.getMessage());
}
@ExceptionHandler(value={Exception.class})
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
publicApiErrorResponseunknownException(Exceptionex){
returnnewApiErrorResponse(500,5002,ex.getMessage());
}
}
2.定义一个返回对象
packagecom.example.rest.error;
/**
*@authorming
*/
publicclassApiErrorResponse{
privateintstatus;
privateintcode;
privateStringmessage;
publicApiErrorResponse(intstatus,intcode,Stringmessage){
this.status=status;
this.code=code;
this.message=message;
}
publicintgetStatus(){
returnstatus;
}
publicintgetCode(){
returncode;
}
publicStringgetMessage(){
returnmessage;
}
@Override
publicStringtoString(){
return"ApiErrorResponse{"+
"status="+status+
",code="+code+
",message="+message+
'}';
}
}
3.定义一个启动Application
packagecom.example;
importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
importorg.springframework.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication
@EnableWebMvc
publicclassSpringBootExceptionHandlingApplication{
publicstaticvoidmain(String[]args){
SpringApplication.run(SpringBootExceptionHandlingApplication.class,args);
}
}
4.最后一个测试类
packagecom.example.rest.controller;
importorg.springframework.http.MediaType;
importorg.springframework.util.Assert;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;
importjavax.validation.ConstraintViolationException;
importjava.util.Collections;
/**
*@authorming
*/
@RestController
publicclassTestController{
@GetMapping(value="/test",produces=MediaType.APPLICATION_JSON_VALUE)
publicvoidtest(Longid){
Assert.notNull(id,"id不能为空!");
thrownewConstraintViolationException("error",Collections.emptySet());
}
}
注意application.properties这个文件的配置
spring.mvc.throw-exception-if-no-handler-found=true
ok,springboot中解决springmvc异常抛出就可以这样解决了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。