怎么用手机网站做软件好,网站如何解析,深圳专业网站建设企业,腾讯云安装wordpress背景
对接一个关联方系统#xff0c;我这边需要提供几个接口。对方要求#xff0c;这些接口有统一的响应格式#xff0c;并且有统一的响应头。统一的响应头包含如下#xff1a;
{TT-Encrypt:noaction,Content-Encoding:gzip我这边需要提供几个接口。对方要求这些接口有统一的响应格式并且有统一的响应头。统一的响应头包含如下
{TT-Encrypt:noaction,Content-Encoding:gzip,Request-Trace:1111rrr454f45f,Date:Thu, 09 Apr 2021 01:52:28 GMT
}
统一响应头设置
嗯需求合理实现也简单
filter方式
实现OncePerRequestFilter然后在doFilterInternal中设置响应头
Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {response.setHeader(TT-Encrypt, noaction);response.setHeader(Request-Trace, xxxxxxx);response.setHeader(Content-Encoding, gzip);response.setHeader(Date, new Date().toString());filterChain.doFilter(request, response);
}注意这里一定要遭doFilter之前设置因为在doFilter之后response的状态已经是committedtrue如果是在doFilter之后设置结果会正常返回但是没有设置的header。 使用过滤器
Configuration
public class NbWebMvcConfigurer extends WebMvcConfigurerAdapter {Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册自定义的拦截器registry.addInterceptor(new HeaderInterceptor());}
}public class HeaderInterceptor extends HandlerInterceptorAdapter {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 设置Header的响应信息response.addHeader(TT-Encrypt, noaction);response.addHeader(Content-Encoding, gzip);response.addHeader(Request-Trace, NbCheckListContextHelper.getTraceId());response.addHeader(Date, new Date().toString());return true;}
}
注意在HeaderInterceptor中一定是preHandle方法中设置否则也不会生效。同Filter一样的原因。
其他方式
当然也可以使用其他的方式例如在RestControllerAdvice中设置也是可以的。但是从代码的设计上来看不妥
接口无响应
其实如果完全按照上述方式进行操作调用该接口的时候我们后端不会有问题但是前端得不到response提示的错误为Error: incorrect header check 遇到这种情况首先要明确按照这种方式设置response的header是肯定可以的。之所以出现这个问题主要是因为设置的header参数有问题。这里的问题是response.addHeader(Content-Encoding, gzip); 在springboot中开启gzip压缩可以使用配置这样响应头中就可以自动添加上response.addHeader(Content-Encoding, gzip);。
server.compression.enabledtrue
server.compression.mime-typesapplication/json