使用背景是部门已有一个框架,所有后端接口的数据都有一个时间戳、验证码以及具体的数据串,但后端接口的接口通过代码生成器生成的word文档,可读性比较差,但是修改接口后,需要手工再来修改;后端接口的单元测试需要前端配合才能调试。不友好。
需要改造,引入swagger生成接口文件,但是已有的安全机制必须保持,前端不需要修改。要达到以下目的:
1、无条件支持swagger 开发文档。
2、不改变前端现有的调用方式。
3、增加后端调试功能。
4、增加后端条件参数自动检查。
5、不增加并降低后端开发难度。
经学习,可以通过过滤器将具体的数据串与controller中接口参数对应,在数据检验过滤器后,再进行过滤完成数据转换。而通过swagger调试的接口通过配置绕过数据检验过滤器和转换过滤器。对接口直接访问。在正式环境中不允许这种绕过配置。
前端访问接口均以.action为后缀,而swagger不需要,所以需要有以下配置:
``
`
public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean<DispatcherServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(dispatcherServlet);
servletServletRegistrationBean.addUrlMappings("/*");
// servletServletRegistrationBean.addUrlMappings("*.action");
}
可以在调测环境中过滤的配置:
<bean id="dataTranslateFilter" class="com.zjhcsoft.zzsoft.base.filters.DataTranslateFilter">
</bean>
<bean id="dataTranslateFilterReg" class="org.springframework.boot.web.servlet.FilterRegistrationBean">
<property name="filter" ref="dataTranslateFilter"/>
<property name="initParameters">
<map>
<entry key="excludeUrls" value="/sysUser/login.action"/>
<entry key="includeUrls" value="/visitCount/**"/>
</map>
</property>
<property name="urlPatterns">
<list>
<value>*.action</value>
</list>
</property>
<property name="name" value="DataTranslateFilter"/>
<property name="order" value="3"/>
</bean>
数据转换过滤器做了三件事:
1、将参数data的内容转为数据流。
2、如果参数data的json元素小于等于1时,增加一个参数,contentType不修改。
3、如果参数data的json元素大于1时,contentType修改为application/json。
4、其它参数和内容不变,保持兼容。
上代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;