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异常抛出就可以这样解决了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。