第一步:在application.yml
文件中添加如下两句:
1 2 3 4 | #没有绑定的url直接抛出错误 spring.mvc.throw-exception- if -no-handler-found= true #不为静态文件建立映射 spring.web.resources.add-mappings= false |
第二步:自定义一个异常处理类AllExceptionHandler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @RestControllerAdvice public class AllExceptionHandler { private static Logger logger = LoggerFactory.getLogger(AllExceptionHandler. class ); @ExceptionHandler (value = Exception. class ) public Msg defaultErrorHandler(Exception e) { logger.error( "AllExceptionHandler " , e); if (e instanceof org.springframework.web.servlet.NoHandlerFoundException) { //404 Not Found return new Msg( 404 , e.getMessage()); } else { //500 return new Msg( 500 , e.getMessage()); } } } |
自定义的Msg
类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class Msg { /** * 返回码 */ private int resultCode; /** * 备注信息 */ private String info; /** * 空构造函数 */ public Msg() { } /** * 自定义消息 * * @param resultCode resultCode * @param info info */ public Msg( int resultCode, String info) { this .resultCode = resultCode; this .info = info; } ... } |
解决swagger前端资源(js/css/img),不能正常访问的问题
当设置了spring.web.resources.add-mappings=false
时,前端静态资源(如:js/css/img)加载失败,解决方案如下:
在实现WebMvcConfigurer这个接口的类中加入下面的方法实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @Configuration public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer { /** * 配置静态访问资源 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler( "/swagger-ui.html" ) .addResourceLocations( "classpath:/META-INF/resources/" , "/static" , "/public" ); registry.addResourceHandler( "/webjars/**" ) .addResourceLocations( "classpath:/META-INF/resources/webjars/" ); } } |
Spring Boot配置接口 WebMvcConfigurer
SpringBoot——》WebMvcConfigurerAdapter详解