spring-boot之(5) web 静态资源
spring-boot加入web的依赖后,项目很容易实现返回json的HTTP接口,所以如果是基于Restful接口的请求,无须多说,Maven加入以下依赖即可。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
- 静态资源目录
传统的项目都没有做前后端分离,所以静态资源是放在Web服务器里面的。spring-boot提供配置文件设置静态资源目录,也提供了默认的方式设定静态资源目录。
- spring-boot默认按照目录名(目录名为/static、/public、/resources或者/META-INF/resources)来设置静态资源目录,也就是资源目录中含有前面所述目录的话,就认为该目录是资源根目录
-
通过application.properties或者application.yml设置spring.mvc.static-path-pattern或者spring.resources.static-locations来设置资源目录
spring.mvc.static-path-pattern=/resources/**
spring.resources.static-locations=
- 错误异常公共代码处理
错误的公共处理分两种方式一种是继承BasicErrorController,另一种是通过@ControllerAdvice。
ControllerAdvice注解实现如下,官网例子
@ControllerAdvice(basePackageClasses = FooController.class) public class FooControllerAdvice extends ResponseEntityExceptionHandler { @ExceptionHandler(YourException.class) @ResponseBody ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) { HttpStatus status = getStatus(request); return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status); } private HttpStatus getStatus(HttpServletRequest request) { Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); if (statusCode == null) { return HttpStatus.INTERNAL_SERVER_ERROR; } return HttpStatus.valueOf(statusCode); } }
继承BasicErrorController重写方法即可(注意produces)
@Controller @RequestMapping({"${server.error.path:${error.path:/error}}"}) public class BasicErrorController extends AbstractErrorController { private final ErrorProperties errorProperties; public BasicErrorController(ErrorAttributes errorAttributes, ErrorProperties errorProperties) { this(errorAttributes, errorProperties, Collections.emptyList()); } public BasicErrorController(ErrorAttributes errorAttributes, ErrorProperties errorProperties, List<ErrorViewResolver> errorViewResolvers) { super(errorAttributes, errorViewResolvers); Assert.notNull(errorProperties, "ErrorProperties must not be null"); this.errorProperties = errorProperties; } public String getErrorPath() { return this.errorProperties.getPath(); } @RequestMapping( produces = {"text/html"} ) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) { HttpStatus status = this.getStatus(request); Map model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML))); response.setStatus(status.value()); ModelAndView modelAndView = this.resolveErrorView(request, response, status, model); return modelAndView == null?new ModelAndView("error", model):modelAndView; } @RequestMapping @ResponseBody public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { Map body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL)); HttpStatus status = this.getStatus(request); return new ResponseEntity(body, status); } protected boolean isIncludeStackTrace(HttpServletRequest request, MediaType produces) { IncludeStacktrace include = this.getErrorProperties().getIncludeStacktrace(); return include == IncludeStacktrace.ALWAYS?true:(include == IncludeStacktrace.ON_TRACE_PARAM?this.getTraceParameter(request):false); } protected ErrorProperties getErrorProperties() { return this.errorProperties; } }
- 参考资料
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-developing-web-applications

浙公网安备 33010602011771号