Spring/SpringBoot的新手,我有两种方法,如下面的-
1.
@GetMapping("/score")
public UserScoreRes getUserScore(@RequestHeader("api-key") String apiKey,
@RequestHeader("jwt") String jwt,
@RequestParam(name = "date", defaultValue = "2022-07-15") String dateStr) {
.....
}
@GetMapping(value = "/score", params ="behaviour-version=2")
public UserScoreResV2 getUserScoreV2(@RequestHeader("api-key") String apiKey,
@RequestHeader("jwt") String jwt,
@RequestParam(name = "date", defaultValue = "2022-07-15") String dateStr) {
....
}
在方法2(getUserScoreV2
(中,如何在方法内部获得behaviour-version
尝试使用-
@GetMapping(value = "/score", params ="behaviour-version=2")
public UserScoreResV2 getUserScoreV2(@RequestHeader("api-key") String apiKey,
@RequestHeader("jwt") String jwt,
@RequestParam(name = "behaviour-version", required = false) String behaviourVersion,
@RequestParam(name = "date", defaultValue = "2022-07-15") String dateStr) {
....
}
但是,它是不工作。
无法修改方法1(getUserScore
(,因为在生产中发布了具有该方法的版本。
尝试这个
@GetMapping(value = "/score", params ="behaviour-version=2")
public UserScoreResV2 getUserScoreV2(@RequestHeader("api-key") String apiKey,
@RequestHeader("jwt") String jwt,
@RequestParam(name = "date", defaultValue = "2022-07-15") String dateStr,
ServletRequest request) {
String behaviorVersion = request.getParameter("behaviour-version");
}
警告
正如Deinum所提到的,行为版本应该是2。
否则,您将无法发送请求。服务器将返回400错误
您可以使用处理程序拦截器来完成此操作。您要做的是,当应用程序接收到具有behaviour_version
标头或参数的/score
端点请求时,您必须通过preHandler(例如:/score/v2
(将其重定向到另一个端点。
然后,调用方可以向同一个端点发送带有附加头/param的请求。springboot拦截器根据标头do重定向。
Ex处理器接收器:
public class ScoreInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
if(request.getParameter(behaviour_v)=="2"){
response.redirect('/score/v1');
return false;
}
return true;
}
}