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; }
}