Web服务不再起作用

时间:2015-01-25 11:29:33

标签: java web-services openstreetmap osrm

在我的应用程序中,我必须使用路由Web服务,并且我使用OSRM Server API

https://github.com/Project-OSRM/osrm-backend/wiki/Server-api

我不知道为什么,但直到昨天早晨服务器-api工作。现在它不起作用,它给了我一个糟糕的请求

http://router.project-osrm.org/viaroute?loc= “+ p.getLat()+”, “+ p.getLon()+” &安培; LOC = “+ d.getLat()+”,“+ d.getLon(); 我使用java和REST协议

String sito="http://router.project-osrm.org/viaroute?loc="+p.getLat()+","+p.getLon()+"&loc="+d.getLat()+","+d.getLon()";
       Client client = ClientBuilder.newClient();

                WebTarget target = client.target(sito);


                Response res = target.request().get();


               System.out.println(res.readEntity(String.class));

我获得了“BAD GATEWAY”

1 个答案:

答案 0 :(得分:0)

在@scai提供的链接中查看firebug,您可以看到Content-Encoding == gzip。您应该设置Accept-Encoding标头。您可以使用acceptEncoding上的便捷链方法InvocationBuilder来完成此操作。所以做一些像

这样的事情
    WebTarget target = client.target(uri);
    String response = target.request()
            .accept("application/json")
            .acceptEncoding("gzip")
            .get(String.class);

不确定您正在使用的JAX-RS客户端库,但stadard Client API没有任何过滤器/拦截器来解码gzip,但如果您使用的是Jersey客户端,那么您可以注册{ {1}}与客户。

GZipEncoder

经过测试,这对我来说很好。在进行上述更改之前,您遇到了同样的问题。

如果您不使用Jersey,我确定您使用的实施应该有一些GZIP过滤器。我知道Resteasy会这样做。如果您的实现没有,您可以始终使用Java的GZIPInputStream来包装响应流

client.register(org.glassfish.jersey.message.GZipEncoder.class);