Jersey PreMatching Filter:为修改后的URI添加参数

时间:2016-05-11 12:22:35

标签: jersey jersey-2.0 jersey-1.0

我有一个休息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() {}

1 个答案:

答案 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());
    }
}