Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送到服务器的JSON从未到达_Java_Javascript_Json_Post_Jersey - Fatal编程技术网

Java 发送到服务器的JSON从未到达

Java 发送到服务器的JSON从未到达,java,javascript,json,post,jersey,Java,Javascript,Json,Post,Jersey,我在向使用Jersey REST构建的web服务发布一些JSON时遇到了一个问题。数据似乎从未到达服务器 总体任务流程如下所示: Javascript发布JSON->Webserver->Webserver获取JSON并打印出来 下面是将JSON数据发布到服务器的Javascript,路径为/postest: <script type="text/javascript"> $(function() { var name = "Tony"; $.post(

我在向使用Jersey REST构建的web服务发布一些JSON时遇到了一个问题。数据似乎从未到达服务器

总体任务流程如下所示:

Javascript发布JSON->Webserver->Webserver获取JSON并打印出来

下面是将JSON数据发布到服务器的Javascript,路径为
/postest

<script type="text/javascript">
$(function() {
    var name = "Tony";
    $.post(
            '/posttest',

            function (data) {
                alert("sune " + data.name);
            });
})
 </script>
以下是数据将被序列化到的bean的定义:

@XmlRootElement
public class StatusBean {
   private String name;

   public StatusBean() {
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name= name;
   }
}
下面是在控制台中打印数据的测试客户机类

ClientConfig cc = new DefaultClientConfig();
Client c = Client.create(cc);
WebResource r = c.resource("http://localhost:9998/posttest");
StatusBean post = r.type(MediaType.APPLICATION_JSON_TYPE).post(StatusBean.class, new StatusBean());
System.out.println("--> " + post.getName());

您的StatusBean应该有名为
name
的字段,而不是dat-它应该与
{“name”:“Tony”}
一致


顺便问一下,RESTEasyServlet的REST资源映射是什么?在上面的设置中,它应该是
/*

我只有resteasy的经验,没有jersey的经验,但我会尝试依赖JAX-RS标准

当发生此类错误时,应该始终更详细地研究HTTP响应。在浏览器中打开网络监视器并检查HTTP响应代码。我认为您得到了405,因为发送的JSON和StatusBeanJava对象之间不匹配。java bean有一个“dat”属性,而JSON有一个“name”属性

还要确保序列化java对象与javascript类似。这可以通过使用jackson Serializer来实现。要使用它,只需将其包含在类路径中。Usgin maven这可能是:

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>

泽西岛

Ty为了回复,现在我更新了Javascript,它只发送了一个字符串,但收到了奇怪的错误消息:ALLVARLIG:Java类StatusBean和Java类StatusBean的消息体读取器,未找到MIME媒体类型应用程序/八位字节流。我没有使用RESTEasy tho,我必须使用它吗?在AJAX调用中设置内容类型为application/json-@nihulus-在Java客户端测试中,使用
MediaType.application\u json
而不是
MediaType.application\u json\u type
。我稍微编辑了您的web服务代码,因为其中仍然存在方法引用错误。@Perception-我收到了奇怪的错误消息MIME media type application/octet stream未找到。我想不出这是什么样的错误。如果你知道任何发布json的例子,那就太好了。这是不可编译的代码。你是手工剪切粘贴还是打字?特别是,在web服务实现类中,您错误地调用了一个方法,并引用了一个不存在的字段。请发布正确的代码。已编辑!如果还有什么地方不清楚,请告诉我。我从我的项目中粘贴了代码的必要部分。Ty用于回复!我现在只发布了一个字符串就编辑掉了代码。最终,尝试一次只执行一个步骤。尝试删除该参数一段时间,并确保可以实际返回/生成正确的JSON。在我看来,您的对象映射器(序列化程序)设置不正确。是的,这就是我担心的,不知道如何正确设置。您是否正在使用Jackson映射器,并已将init parem
com.sun.jersey.api.json.POJOMappingFeature
添加到链接博客文章中解释的
web.xml
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.8</version>
</dependency>