Jersey预匹配筛选器:向修改的URI添加参数
我有一个RESTAPI。例如:Jersey预匹配筛选器:向修改的URI添加参数,jersey,jersey-2.0,jersey-1.0,Jersey,Jersey 2.0,Jersey 1.0,我有一个RESTAPI。例如: http://localhost:8080/api/user/view?name=user&lastname=demo 我想修改我的URI以维护版本。 我想在“/user/view”之间添加“/v1/” 因此,我的URI如下所示: http://localhost:8080/api/user/v1/view?name=user&lastname=demo 我可以修改我的URI并创建一个新的URI,但我不知道如何将参数传递给修改后的URI 以下是
http://localhost:8080/api/user/view?name=user&lastname=demo
我想修改我的URI以维护版本。
我想在“/user/view”之间添加“/v1/”
因此,我的URI如下所示:
http://localhost:8080/api/user/v1/view?name=user&lastname=demo
我可以修改我的URI并创建一个新的URI,但我不知道如何将参数传递给修改后的URI
以下是我的代码:
@Provider
@PreMatching
public class RewriteUrl implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
UriInfo uriInfo = requestContext.getUriInfo();
String path = uriInfo.getPath();
MultivaluedMap<String, String> parameters = uriInfo.getQueryParameters();
path=path.replaceFirst("/","/v1/");
URI baseUri = uriInfo.getBaseUriBuilder().path(path).build();
URI requestUri = uriInfo.getRequestUri();
requestContext.setRequestUri(URI.create(baseUri.toString()));
}
}
但是我不理解如何将参数传递给新的URI
我也想知道这样做是正确和安全的吗?还是我做错了。 请让我知道他们的方法是否更好(在URI中添加'v1') 调试时,我发现了以下问题: 预匹配过滤器
uriInfo.getRequestUri().toString() http://localhost:8080/api/user/view?name=user&lastname=demo
uriInfo.getAbsolutePath().toString() http://localhost:8080/api/user/view
uriInfo.getBaseUri().toString() http://localhost:8080/api/
uriInfo.getPath().toString() user/view
parameters.toString() {lastname=[demo], name=[user]}
uriInfo.getRequestUri().toString() http://localhost:8080/api/user/v1/view
uriInfo.getAbsolutePath().toString() http://localhost:8080/api/user/v1/view
uriInfo.getBaseUri().toString() http://localhost:8080/api/
uriInfo.getPath().toString() user/v1/view
parameters.toString() {}
后过滤器
uriInfo.getRequestUri().toString() http://localhost:8080/api/user/view?name=user&lastname=demo
uriInfo.getAbsolutePath().toString() http://localhost:8080/api/user/view
uriInfo.getBaseUri().toString() http://localhost:8080/api/
uriInfo.getPath().toString() user/view
parameters.toString() {lastname=[demo], name=[user]}
uriInfo.getRequestUri().toString() http://localhost:8080/api/user/v1/view
uriInfo.getAbsolutePath().toString() http://localhost:8080/api/user/v1/view
uriInfo.getBaseUri().toString() http://localhost:8080/api/
uriInfo.getPath().toString() user/v1/view
parameters.toString() {}
不确定是否仍然相关,我最近也不得不实施这个。 以下是我的解决方案:
@Provider
@PreMatching
public class RewriteUrl implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws
IOException {
UriInfo uriInfo = requestContext.getUriInfo();
String path = uriInfo.getPath();
path = path.replaceFirst("/","/v1/");
UriBuilder uriBuilder = UriBuilder
.fromUri(uriInfo.getBaseUri())
.path(path)
.replaceQuery(uriInfo.getRequestUri().getQuery());
requestContext.setRequestUri(uriBuilder.build());
}
}
我认为您不需要再次添加查询参数。您是否为它们签入了资源方法?或者您正在尝试添加新的URI?是的,我在post筛选器中调试并检查了我的新URI,并且得到了没有参数的新URI。为什么要检查URI。检查查询参数映射。这就是问题所在先生,我已经编辑了我的问题,并添加了我在过滤器中得到的参数。您是否尝试调用
path(path)。queryParam(…,…)