此文已由做者易国强受权网易云社区发布。
html
欢迎访问网易云社区,了解更多网易技术产品运营经验。web
在默认状况下Spring Boot 的MVC框架使用的视图解析ViewResolver类是ContentNegotiatingViewResolver,这个解析器比较智能,它会根据你的请求类型(通常以请求uri的后缀来区分或请求头的Accept获得)来自动选择返回的数据文档类型。spring
通常状况下,这个能知足大部分人的使用需求,但咱们这里只是须要提供RESTful接口的话,那么这个解析规则就不太适合咱们了,好比说咱们的心跳检测controller中若是返回的是非字符串类型的数据(字符串默认是能够解析成功的),那么就会提示解析失败的错误,json
或以下的异常信息:安全
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation ....
在这里咱们能够在主入口类中继承WebMvcConfigurerAdapter类,修改默认视图解析的解析规则,示例以下所示,这里favorPathExtension方法表示是否支持后缀匹配,咱们这里直接设置为false便可实现咱们的需求,其余不作任何修改,那么咱们的因此返回结果会根据自定义的解析策略返回jackson解析的json格式数据。框架
@SpringBootApplicationpublic class BingoWebApplication extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication.run(BingoWebApplication.class, args); } @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } }
上面代码中提到ContentNegotiationConfigurer 这个配置类还能够自定义不少解析的规则,好比ignoreAcceptHeader方式设置是否匹配请求头的信息,defaultContentType方法设置默认匹配类型等等。具体你们能够本身试下。ide
另外,若是咱们须要自定义其余解析器,好比咱们经常使用的freemarker的解析器,那么也很简单,咱们仍然能够在主入口类中继承WebMvcConfigurerAdapter类或自定义一个类继承WebMvcConfigurerAdapter类,但须要注意自定义类须要加上@Configuration的注解,而后在里面咱们实例化一个视图解析的bean便可。以下所示:spring-boot
@Beanpublic FreeMarkerViewResolver getFreeMarkerViewResolver(){ FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); resolver.setPrefix(""); resolver.setSuffix(".ftl"); resolver.setContentType("text/html; charset=UTF-8"); resolver.setRequestContextAttribute("rc"); return resolver; }
上面的代码很简单,实际和咱们平时在xml中配置的视图解析配置同样。这个Bean实际是覆盖了默认的viewResolver,达到了自定义解析的目的。spa
上面简单介绍了若是须要自定义freemarker的视图解析该如何配置,实际上还有另外的方法,spring boot 其实已经帮咱们作了不少事情,好比说它集成了freemarker的功能,那么咱们只须要引入相关的依赖便可达到咱们的目的,在pom文件中加入以下依赖:orm
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId></dependency>
加入上述依赖便可正常使用freemarker的功能,默认状况下无需其余的配置,咱们的静态文件能够放在工程的static目录,模板文件则放在templates目录下便可,这两个目录在咱们新建工程的时候就自动帮我建立完成了,若是不是采用的框架自动建立的,那么手动建立此目录便可,固然你能够设置其余自定义的存放目录,在核心配置文件中自定义设置便可,好比设定ftl文件路径 :spring.freemarker.template-loader-path=classpath:/templates
不足之处,欢迎指正,谢谢~
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 认识用户访谈