Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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发送到服务器将为415提供不支持的媒体类型_Java_Json_Angularjs_Jax Rs_Jersey 2.0 - Fatal编程技术网

Java 将JSON发送到服务器将为415提供不支持的媒体类型

Java 将JSON发送到服务器将为415提供不支持的媒体类型,java,json,angularjs,jax-rs,jersey-2.0,Java,Json,Angularjs,Jax Rs,Jersey 2.0,我有以下角度代码: <button ng-click="ctrl.submit(light)">Switch</button> 在服务器端,我使用以下方法响应请求: @POST @Path("/state/") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.TEXT_HTML) public String setStateOfLight(JSONObject aLight) { if

我有以下角度代码:

<button ng-click="ctrl.submit(light)">Switch</button>
在服务器端,我使用以下方法响应请求:

 @POST
 @Path("/state/")
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.TEXT_HTML)
 public String setStateOfLight(JSONObject aLight) {
    if(aLight == null) {
      return "It's a null";
    } else {
      System.out.println("content: " + aLight);
    }
    JSONObject jsonObject = new JSONObject();
    //Update the state of the light with the given id
    for(Light light: lightCollection) {
        // .....
    }
    return getLightsStateAsJSON();
 }
当我单击我的按钮时,我收到以下消息:

根据firefox,我确实在请求中发送JSON。至少当我检查发送数据时它是这样说的

这是我的头请求数据:


这里缺少什么?

标题内容类型似乎设置为text/html,即使主体是JSON。我想您需要在文章中的某个地方将内容类型设置为application/json

“我下载了Jersey 2.17及其所有依赖项。至少下载网站上是这么说的”

是的,除了基本的低级类型之外,JSON转换支持并不附带,它可以从
InputStream
转换。因此,除了Jersey捆绑包中的jar之外,没有其他任何东西,您可以使用的唯一类型是
String
InputStream
byte[]
。如果您试图操纵JSON,那么这并没有多大帮助

转换的工作原理是通过使用
MessageBodyReader
s和
MessageBodyWriter
s。我不知道什么是
JSONObject
,但我猜它来自。在任何情况下,您都需要一个
MessageBodyReader
,以便它处理传入的转换。我猜你没有。我个人不知道在哪里可以得到一个特定的API

相反,我将使用一个可以处理JSON到POJO映射的库。杰克逊是我推荐的人。基本原理很容易理解。说这是你的JSON

{"name":"your name", "id": "2"}
您只需使用创建一个具有字段和属性的类。对于上面的JSON,我们可以使用

public class User {
    private String name;
    private String id;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
}
现在,您的方法参数可以接受
用户
类型

要获得此支持,您需要添加Jackson提供商。下载下面的

  • 从下面的图片中获取所有信息

    我从另一篇2.2.3版的文章中得到了一张图片——忽略版本。您希望获得的所有版本的2.3.2。对于第一个依赖项,它们都可以在上面的链接中找到。只需在搜索栏中搜索它们。找到后,选择版本并下载


在加入这些罐子之后。您应该具有JSON到POJO的支持。

对于类型
JSONObject
,您可能没有
MessageBodyReader
。我会想象这是记录在服务器上的如果这是casepeeskillet,在服务器端没有记录。就好像它一开始就没有实现一样。什么样的JAX-RS实现(和版本)您正在使用?或者您可以只显示所有依赖项Maven或Jar。您想知道:清单版本:1.0 Bnd LastModified:1407413291581构建Id:08/07/2014 02:08 PM构建Jdk:1.7.060构建者:m_potociar Bundle描述:用于RESTful Web服务的Java API(JAX-RS)Bundle DocURL:Bundle许可证:,http://glassfish.java.net/public/CDDL+GPL_1_1.html捆绑包版本:2捆绑包名称:javax.ws.rs-api捆绑包符号名称:javax.ws.rs-api捆绑包供应商:Oracle公司捆绑包版本:2.0.1,未按我的要求打印…响应头内容类型设置为text/html。不是请求头内容类型。或者,还有一种可能,我不理解响应和请求头的含义。
public class User {
    private String name;
    private String id;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
}