@GetMapping(value = "/student/header", headers = {"X-API-VERSION=1"})
public StudentV1 headerV1() {
return serviceImpl.headerV1();
}
@GetMapping(value = "/student/header", headers = {"X-API-VERSION=2"})
public StudentV1 headerV2() {
return serviceImpl.headerV2();
}
如果我答对了您的问题,您希望不带x-api-version
头发送的请求将自动路由到headerv2()
方法
可以这样做:
从概念上讲,您需要一个在Spring MVC Dispatch Servlet之前执行的Web过滤器,并且您必须检查请求是否包含一个头,如果它没有添加一个您认为应该是最新版本的头(从配置或其他方面)。
// The web filter
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;
@Component
@Order(1)
public class LatestVersionFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
if(req.getHeader("X-API-VERSION")== null) {
HeaderMapRequestWrapper wrappedRequest = new HeaderMapRequestWrapper(req);
wrappedRequest.addHeader("X-API-VERSION", resolveLastVersion());
filterChain.doFilter(wrappedRequest, servletResponse);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
private String resolveLastVersion() {
// read from configuration or something
return "2";
}
}
class HeaderMapRequestWrapper extends HttpServletRequestWrapper {
/**
* construct a wrapper for this request
*
* @param request
*/
public HeaderMapRequestWrapper(HttpServletRequest request) {
super(request);
}
private Map<String, String> headerMap = new HashMap<String, String>();
/**
* add a header with given name and value
*
* @param name
* @param value
*/
public void addHeader(String name, String value) {
headerMap.put(name, value);
}
@Override
public String getHeader(String name) {
String headerValue = super.getHeader(name);
if (headerMap.containsKey(name)) {
headerValue = headerMap.get(name);
}
return headerValue;
}
/**
* get the Header names
*/
@Override
public Enumeration<String> getHeaderNames() {
List<String> names = Collections.list(super.getHeaderNames());
for (String name : headerMap.keySet()) {
names.add(name);
}
return Collections.enumeration(names);
}
@Override
public Enumeration<String> getHeaders(String name) {
List<String> values = Collections.list(super.getHeaders(name));
if (headerMap.containsKey(name)) {
values.add(headerMap.get(name));
}
return Collections.enumeration(values);
}
}
我目前正在Ubuntu18.04上。 我的默认python版本是python 3.7.9 我想将它升级到Python3.9.2,并将其设置为默认的Python版本 我该怎么做?
我正在上下翻页有人能帮帮我吗?我使用appium版本1.6和java客户端6.01对于最新版本,它是不显示driver.scroll()方法或TouchAction操作=新的TouchAction(this.driver);action.press(starX, start Y). moveTo(endX, endY).释放()。执行();它不执行按
问题内容: 在运行时,我经常创建/修改 log4j Logger,Appenders,Levels,Layouts,并且有时需要将所有内容重置为默认值。 Log4j 系统具有定义明确的 默认初始化过程 ,该 过程 在将 log4j 类加载到内存时执行。有什么方法可以稍后在运行时以编程方式重新执行整个过程吗? 我在 log4j 文档中找到了几种方法,但是不确定它们中的任何一种是否可以执行 默认初始化
SpringBoot项目中parent中没有默认版本的依赖如何选择版本?类如mybatis-spring-boot-starter依赖,parent中是没有默认配置的。我想请问类似这种情况如何选择合适的依赖版本呢?我在mybatis官网也没有找到相关资料,依赖的jar包中也没有,我不喜欢看网友给的资料,我还是喜欢看官网的资料,大家都是怎么选择的呢?靠经验?靠百度? 尝试过百度和查看官网,想知道对于
我刚刚注意到Gradle发布了2.12版,根据发行说明,脚本的编译速度应该提高20%。我想在Android Studio中升级到那个版本。 我用的是v1。在设置中,我选择了“使用默认gradle包装器”选项,这意味着每个项目将使用特定的gradle版本,而不是使用本地gradle安装。使用的版本是文件。例子: 现在,如果我将其更改为: 然后Android Studio找不到该版本并抛出一个错误。显
我在运行时遇到此错误 我在apt中搜索过,似乎已经安装好了。 我已经通过这个github问题,这是不清楚的解决方案。