博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot 小结
阅读量:6768 次
发布时间:2019-06-26

本文共 4662 字,大约阅读时间需要 15 分钟。

  hot3.png

springboot

springMVC

springboot提供了开箱即用的web mvc,项目中用到的是gradle,只需要引用两个包就可以了

compile('org.springframework.boot:spring-boot-starter')compile('org.springframework.boot:spring-boot-starter-web')

并不需要做什么其他配置,就可以启动web项目,编写restful接口。还是有一些需要个性化定制的功能需要我们手动去配置。有一些并不是springboot独有,配置的时候都是采用代码代替xml的方式。问题记录如下:

  • Json序列化, springmvc都是需要配置的,之前都是通过xml来配置。在springboot里面需要自定义MessageConverter。注册bean的方式加载到spring消息转换器里面,默认是放置到转换器队列的最前面优先解析。 springmvc默认的json解析器是Jackson,我这边算是先继承MappingJackson2HttpMessageConverter,修改覆盖初始方法来定制化项目需要的json格式化规则。
    public class JsonMessageConverter extends MappingJackson2HttpMessageConverter {        @Override        protected void init(ObjectMapper objectMapper) {            objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);            objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);            objectMapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);            objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);            objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT);            objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));            super.init(objectMapper);        }    }

后面需要将这个注册到spring bean管理里面。在configuration类里面注册

@Bean public HttpMessageConverters customConverters() {     return new HttpMessageConverters(new JsonMessageConverter()); }	```*	UTF8编码同样是在configuration类里面注册,其实configuration就相当于spring的一个xml文件,每个方法相当于定义的一个bean,方法之间是可以互相依赖的。spring已经考虑到这点,不用担心依赖的时候破坏单例的特性。 ``` @Bean public CharacterEncodingFilter encodingFilter() {     CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();     encodingFilter.setEncoding("UTF-8");     encodingFilter.setForceEncoding(true);     return encodingFilter; }	```*	拦截器用到拦截器的时候,需要继承WebMvcConfigurerAdapter,通过适配器的模式,覆盖相应的方法。当然同时这个类需要标注为configuration类。 | 方法 |	|--------|	|configurePathMatch| |configureContentNegotiation| |configureAsyncSupport| |configureDefaultServletHandling| |addFormatters| |addInterceptors| |addResourceHandlers| |addCorsMappings| |addViewControllers| |configureViewResolvers| |addArgumentResolvers| |addReturnValueHandlers| |configureMessageConverters| |extendMessageConverters| |configureHandlerExceptionResolvers| |extendHandlerExceptionResolvers| |getValidator| |getMessageCodesResolver|拦截器添加选择覆盖addInterceptors

@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MappedInterceptor(new String[]{"/**"}, new String[]{""}, new MvcInterceptor())); }

MvcInterceptor是自定义的拦截器,如果需要用到url拦截的功能,需要使用spring带的MappedInterceptor定义拦截的url和排除的url项目中还用到了addArgumentResolvers,addReturnValueHandlers就不一一列举了。### 项目*	属性文件	使用@PropertySources({@PropertySource(value = "classpath:setting.properties")})来引入,不过这个不是springboot里面的东西。*	项目分布	*	css,js前端等用到的组件都分布在public下面或者static下面    需要渲染的模板定义在templates里面,安利一下我正在使用的模板[pebble](http://www.mitchellbosecke.com/pebble/documentation/guide/basic-usage)    *	数据库使用的是mybatis,sql还是写在xml里面在,始终觉得在代码里面写sql比较别扭。    *	打包工具使用的是gradle,第一次接触,感觉还是不错,在编译速度上超过了maven。    	```        compile('org.springframework.boot:spring-boot-starter')        compile('org.springframework.boot:spring-boot-starter-log4j2')        compile('org.springframework.boot:spring-boot-starter-web') {            //exclude group:'org.springframework.boot',module:"spring-boot-starter-tomcat"        }        compile('org.springframework.boot:spring-boot-devtools')        compile('org.springframework.boot:spring-boot-starter-test')        compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0')        compile('mysql:mysql-connector-java:6.0.5')        compile('com.zaxxer:HikariCP:2.6.1')        compile('org.projectlombok:lombok:1.16.16')        //token        compile("io.jsonwebtoken:jjwt:0.7.0")        //bean copy        compile('commons-beanutils:commons-beanutils:1.9.3')        //apache commons lang3        compile('org.apache.commons:commons-lang3:3.6')        compile('javax.validation:validation-api:2.0.0.CR2')        testCompile('junit:junit:4.12')		```项目中用到的jar包如上,springboot的版本号定义在buildscript里面在。使用的是1.5.2*	项目发布项目还是采用外置的tomcat发布,需要在启动类Application继承SpringBootServletInitializer,覆盖    ```    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {        return builder.sources(Application.class);    }	```    发布的脚本上gradle clean build -x test*	profile配置	使用了gradle,在dev环境和prod环境的配置上,相对来说是没有maven好使的,需要启动的时候在环境变量里面配置-Dspring.profiles.active=dev其他的跟平常的spring开发还都是保持一致的。随着后续功能的开发慢慢会涉及到更多springboot的功能,个人感觉在开发效率上还是提升了不少。

转载于:https://my.oschina.net/zooy/blog/1359651

你可能感兴趣的文章
表单的思考
查看>>
Java获取user目录
查看>>
Office
查看>>
nodejs 中http请求头,响应头常见参数
查看>>
优化ListView异步加载网络图片
查看>>
[转载]转载,opencv轮廓查找,匹配以及特征提取,实例
查看>>
cmd中ls命令的添加
查看>>
HttpClient4.3模拟登陆OSChina开源社区
查看>>
JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
查看>>
【插件开发一】开发简单OpenFire插件
查看>>
Android数据存储SQLite的事务操作
查看>>
EditText输入字数限制的三个方法
查看>>
Docker学习(五)—— 单机Redis安装与集群安装和分布式安装
查看>>
eclipse使用一段时间后很卡,如何解决?
查看>>
IS Decisions如何帮助企业提高安全标准
查看>>
华为HCNP/HCNA的小伙伴们,你们不能错过的资源都放这了!
查看>>
Linux 查看网卡流量iptraf
查看>>
深入分析ConcurrentHashMap
查看>>
Live your life that the fear of death
查看>>
基于Node.js的socket.io机制的陷阱,仅针对于客户端继承socket.io的问题的解决方案...
查看>>