当前位置: 首页 > 知识库问答 >
问题:

JAX RS 2使用Jersey客户端获取“未找到HTTP 404”,但浏览器上的URL相同

钮高朗
2023-03-14

我是JAX RS和Jersey 2的新手。我简单的rest资源服务器端程序“Hello World”运行良好,我可以通过任何浏览器访问它,并高级rest客户端应用程序谷歌Chrome。

但是当我编写了一个JAX RS Jersey 2客户机时,它给我的HTTP 404没有找到,下面是详细信息:

<servlet>
    <servlet-name>jersey</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>jersey</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
package     com;
import     javax.ws.rs.GET;
import     javax.ws.rs.Path;


@Path("hello")
public class HelloRest {

    @GET()
    public  String sayHello(){
    return "Welcome to the world of REST";
    }
}
asm-3.1.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.9.2.jar
jackson-mapper-asl-1.9.2.jar
jackson-xc-1.9.2.jar
jersey-client-1.18.jar
jersey-core-1.18.jar
jersey-json-1.18.jar
jersey-server-1.18.jar
jersey-servlet-1.18.jar
jettison-1.1.jar

它在浏览器中运行良好。

 package userCoreJava;

 import java.net.URI;
 import java.net.URISyntaxException;

 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Invocation.Builder;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Response;



 public class UsingJersey {
    public static void main(String[] args) {
        Client client = ClientBuilder.newClient();
        WebTarget target=null;
        try {
            target = client.target(new URI("http://localhost:8080/ProJrsRi_HelloRest2/rest/hello"));
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        Builder builder =   target.request();
        //Response response  = builder.get();
        String result  = builder.get(String.class);
        System.out.println(target.getUri().toString());
        System.out.println("Result=" + result);

    }
 }
asm-all-repackaged-2.2.0-b21.jar
cglib-2.2.0-b21.jar
guava-14.0.1.jar
hk2-api-2.2.0-b21.jar
hk2-locator-2.2.0-b21.jar
hk2-utils-2.2.0-b21.jar
javax.annotation-api-1.2.jar
javax.inject-2.2.0-b21.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.jar
jaxb-api-2.2.7.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet-core.jar
jersey-container-servlet.jar
jersey-server.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar 
    Exception in thread "main" javax.ws.rs.NotFoundException: HTTP 404 Not found
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:917)
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770)
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90)
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296)
    at userCoreJava.UsingJersey.main(UsingJersey.java:25)

请帮我解决这个问题,我陷进去了。

共有1个答案

楚瑞
2023-03-14

您应该进一步研究Jersey客户机的API文档(https://Jersey.java.net/documentation/latest/user-guide.html#client)。乍一看,您似乎在定义WebTarget时犯了一个错误,即您需要定义Target(web服务endpoint),然后定义resource(您希望与之交互的特定资源),因此应该有如下内容:

Client client = ClientBuilder.newClient();
WebTarget target = client
    .target("http://localhost:8080/ProJrsRi_HelloRest2/rest").path("hello");

可能这就是为什么您可以在浏览器上看到结果,而不能在Java应用程序中看到的原因...

您还可以在文档中找到一些非常好的代码示例。

HTH.

 类似资料:
  • 我对JAX RS和Jersey 2是新的。我的简单的rest资源服务器端程序“Hello World”运行良好,我可以通过任何浏览器和google Chrome的高级rest客户端应用程序访问它。 请帮我解决这个问题,我陷进去了。

  • 问题内容: 是否有从客户端浏览器获取时区的可靠方法?我看到了以下链接,但我想要一个更强大的解决方案。 使用JavaScript自动检测时区 JavaScript中的时区检测 问题答案: 查看此存储库pageloom很有帮助 下载jstz.min.js并将功能添加到您的html页面 然后从您的显示代码调用此函数

  • 我试图在一些servlet和jsp之间添加一个过滤器,以便在显示jsp之前登录的用户。问题是,我试图检索浏览器的网址,这是转发到登录页面,但我找不到如何。我尝试在过滤器中获取URI,并将其作为请求的属性发送给Connexion servlet,但是,它不起作用。

  • 我已经开始学习Selenium WebDriver。我注意到的问题,如给定的网址不采取后火狐浏览器推出。请帮忙解决问题 WebDriver版本:2.53 Firefox:48.0 我看到下面的错误 组织。openqa。硒。火狐。NotConnectedException:45000毫秒后无法连接到端口7055上的主机127.0.0.1。Firefox控制台输出:,“syncGUID”:“0Sec7

  • 我正在使用Jersey实施Rest服务。我想在浏览器上显示JSON,但我得到的是XML。 我感谢你的帮助。