0

我正在学习用 Jersey 实现宁静的网络服务。我总是收到“POST

http://localhost:8080/rest/welcome/post 

返回了 404 Not Found 的响应状态” - 我的代码有什么问题?服务器端的上下文根是 rest,我在类级别有 @Path 欢迎,在方法级别有 @pPath post。

客户

public class WelcomeRestJsonClient {

    @Produces("application/json")
    @Consumes("text/plain")
    public void send() {
        MyObject myObject = new MyObject();

        ClientConfig clientConfig = new DefaultClientConfig();
        clientConfig.getClasses().add(com.restclient.MyJsonProvider.class);
        Client client = Client.create(clientConfig);
        WebResource webResource = client.resource("http://localhost:8080/rest/welcome/post");
        ClientResponse response = webResource.type(MediaType.APPLICATION_JSON).post(ClientResponse.class, myObject);
        System.out.println("success");
    }
}

服务器

@Path("/welcome")
public class WelcomeRestJson {

    @POST
    @Path("/post")
    @Produces("text/plain")
    @Consumes("application/json")

    public String processPostData(MyObject myObject) {
        System.out.println("Inside processPostData");
        return "success";
    }
 }

我是否因为不正确的 JsonProvider 配置而面临这个问题?在客户端,我使用 MyJsonProvider 扩展 JacksonJaxbJsonProvider 将 MyObject 转换为 Json。我在服务器端的代码只接受 MyObject。我是否也需要一些代码来连接服务器端的 Json 提供程序?

这是我的 web.xml

<servlet>
    <servlet-name>Jersey REST Service</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.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

我可以访问rest index.html。我在日志文件中看到以下内容。信息:找到根资源类:com.rest.WelcomeRestJson 类我删除了路径中的“/”。还是一样的404错误。请帮忙。

4

3 回答 3

1

将 Jersey Servlet 添加到 后web.xml,不带参数的 get 开始工作。但是帖子仍然失败。将以下初始化参数添加到 Jersey Servlet 并替换 Jersey Servlet 映射/rest/*/*解决问题。

<init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
</init-param>
于 2012-06-13T22:06:33.790 回答
0
  • 不要在路径(@Path("/welcome"))注释中使用斜杠(/),而不是写@Path("welcome")@Path("post")

  • 我建议您不要使用服务名称post,因为 i 可能是保留关键字。而不是后期使用@Path("test")或其他东西。

  • 使用 firefox 插件Poster测试您的服务状态,以验证服务端是否一切正常。这是 404 错误,它与 json 错误无关,只是您的服务在http://localhost:8080/rest/welcome/post. 它与代码无关,与配置有关。

  • 你能达到http://localhost:8080/rest/吗?
于 2012-06-13T08:01:44.353 回答
0

1)您似乎没有注册您的资源。您依赖 Jersey 的自动扫描功能吗?它可能无法在某些环境中正常工作。首选方式是使用javax.ws.rs.core.Application类,因为它是标准的 JAX-RS 方式。

2) 您还需要注册您的提供商。首选方式是使用javax.ws.rs.core.Application类,因为它是标准的 JAX-RS 方式。

2.1)无论如何,不​​注册提供者不是得到404的原因。实际上我不记得你会得到什么错误代码,可能是500。

3)强烈建议:检查码头日志。它打印了很多包含所有注册资源和提供者(包括默认和自定义)列表的信息。

于 2012-06-13T13:57:26.057 回答