我有一个休息api。例如:
http://localhost:8080/api/user/view?name=user&lastname=demo
我想修改我的URI以维护版本。 我想添加' / v1 / '介于' / user / view ' 所以我的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:
http://localhost:8080/api/user/v1/view
但我不了解如何将参数传递给新URI。
我也想知道这是正确而安全的方法吗?
或者我做错了。
如果他们是更好的方法,请告诉我。(在URI中添加&#39; v1&#39;)。
以下我在调试时发现:
预匹配过滤器
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]}
POST FILTER
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() {}
答案 0 :(得分:1)
不确定是否仍然相关,我最近也必须实施。 这是我的解决方案:
@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());
}
}