第一步:在application.yml文件中添加如下两句:
#没有绑定的url直接抛出错误 spring.mvc.throw-exception-if-no-handler-found=true #不为静态文件建立映射 spring.web.resources.add-mappings=false
第二步:自定义一个异常处理类AllExceptionHandler
@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类:
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这个接口的类中加入下面的方法实现
@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详解