3

Jersey を使用して、この例に従って RESTFul Web サービスを学習しようとしています。次の場所からアクセスできるサンプル サービスを作成しました。

    http://localhost:8080/de.vogella.jersey.first/rest/hello. 

このサービスを呼び出すクライアントを作成しましたが、このクライアントを実行すると、次のような例外が発生します。

   GET http://localhost:8080/de.vogella.jersey.first/rest/hello 
     returned a response status of 404 Not Found Exception in thread "main"  
   com.sun.jersey.api.client.UniformInterfaceException: 
     GET http://localhost:8080/de.vogella.jersey.first/rest/hello 
       returned a response status of 404 Not Found
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:507)
at de.vogella.jersey.first.client.Test.main(Test.java:23)

サービスクラスは

public class Hello {

  // This method is called if TEXT_PLAIN is request
  @GET
  @Produces(MediaType.TEXT_PLAIN)
  public String sayPlainTextHello() {
    return "Hello Jersey";
  }

  // This method is called if XML is request
  @GET
  @Produces(MediaType.TEXT_XML)
  public String sayXMLHello() {
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
  }

  // This method is called if HTML is request
  @GET
  @Produces(MediaType.TEXT_HTML)
  public String sayHtmlHello() {
    return "<html> " + "<title>" + "Hello Jersey" + "</title>"
        + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
  }
}

クライアントコード:

public class Test {
  public static void main(String[] args) {
    ClientConfig config = new DefaultClientConfig();
    Client client = Client.create(config);
    WebResource service = client.resource(getBaseURI());
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_PLAIN).get(ClientResponse.class).toString());  
    System.out.println(service.path("rest").path("hello").accept(MediaType.TEXT_XML).get(String.class));        
    private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost:8080/de.vogella.jersey.first").build();
  }
} 

奇妙な部分は、ヒットすると正しい結果が得られることです

    http://localhost:8080/de.vogella.jersey.first/rest/hello 

ブラウザから。この問題を解決するための助けをいただければ幸いです。ありがとう

4

4 に答える 4

1

サービス アプリケーションの要件に従って、クラスを作成する前に「パス」注釈について言及しませんでした。たとえば、次のようになります。

@Path("hello")
public class Hello {

}

サービス アプリケーションの問題はそれだけです。

于 2013-03-26T13:59:51.070 に答える
0

この例では、次の関数でブラウザーに渡す URL 全体を渡す以外の方法でその例を実行したい場合、メイン クラスで結果が得られますが、問題はありません。

private String doGet(String url){
        ClientConfig config = new DefaultClientConfig();
        Client client = Client.create(config);
        WebResource resource = client.resource(url);
        ClientResponse response = resource.type("application/x-www-form-urlencoded").get(ClientResponse.class);
        String en = response.getEntity(String.class);
        return en;
    }
于 2012-11-27T06:32:25.267 に答える