SpringBoot正在访问方法内部的参数



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;
}
}

相关内容

  • 没有找到相关文章

最新更新