是否可以获取没有路径参数的绝对请求URL

时间:2014-03-10 17:43:10

标签: java rest jersey

我正在尝试获取没有路径参数值的请求网址。

考虑我的完整网址

URl: http://localhost:8080/aaa/mock/abcd/1234/true
Path parameters: abcd, true
Output needed: /aaa/mock/abcd

我的网络服务方法如下所示。

@Path(value = "/aaa/mock")
@Component
public class MockService
{
    private static Log log = LogFactory.getLog(MockService.class);


    //address
    @GET
    @Path(value = "/{mockrequest}/{status}")
    @Produces(MediaType.JSON)
    public String mockEngagement(@Context ContainerRequestContext request,@PathParam("mockrequest") String mockrequest,@PathParam("status") String status )
    {
        log.info("The mock url is"+request.getUriInfo().getRequestUri());  
        log.info("The mock url is"+request.getUriInfo().getAbsolutePath()); 
        log.info("The mock url is"+request.getUriInfo().getBaseUri()); 
        log.info("The mock url is"+request.getUriInfo().getMatchedURIs()); 
        **//Out put needed /aaa/mock/abcd**
        return "ajaja";
    }


}

上述调用均未返回所需信息。

我在想是否有一个通用的过程来获得所需的输出而不管路径参数的数量。

任何此类方法。

3 个答案:

答案 0 :(得分:3)

尝试UriInfo#getPath()UriInfo#getPath(boolean)UriInfo#getPathSegments()。 boolean参数是路径是否应该编码。

https://jersey.java.net/apidocs/2.3.1/jersey/index.html

您还可以获取绝对路径和基本路径,然后使用URI#relativize(URI)

答案 1 :(得分:0)

尝试一下:

request.getUriInfo().getPathSegments().get(0).getPath()

答案 2 :(得分:-2)

public void filter(ContainerRequestContext context) throws IOException {


    Message message = PhaseInterceptorChain.getCurrentMessage();

    Set<Map.Entry<String, Object>> o = (Set<Map.Entry<String, Object>>)message.entrySet(); 

    for (Map.Entry<String, Object> oo : o) { 
        String key = oo.getKey(); 
        Object val = oo.getValue();

        // Thises two properties gives the path of web service 
        //path_to_match_slash
        //org.apache.cxf.request.uri
        if(key.equals("path_to_match_slash"))
        {   String v = (String)val;
            System.out.println (key);
            System.out.println (v);

        }
        if(key.equals("org.apache.cxf.request.uri"))
        {   String v = (String)val;
            System.out.println (key);
            System.out.println (v);
        }

    }
}

此代码仅适用于apache cxf rest 我们可以在ContainerRequestContext中找到path_to_match_slash,org.apache.cxf.request.uri属性