POST到泽西REST服务获取错误415不支持的媒体types
我正在使用Jersey和Tomcat的JAX-RS Web应用程序。 获取请求很好,但是当我尝试发布JSON我得到一个HTTP状态415 – 不支持的媒体types。
这是我简单的HelloWorld.java:
package service; import javax.ws.rs.*; @Path("hello") public class HelloWorld { @GET @Produces("text/plain") public String get() { return "hello world"; } @POST @Consumes("application/json") public String post(JS input) { return input.hello; } public static class JS { public String hello; } }
这是我在邮差尝试的请求(与'应用程序/ JSON'头):
这是带库的项目布局:
我在用:
- Java 7 x64
- 泽西岛2.17
- Tomcat 7.0.62 x64
谢谢!
Jersey发行版不包含JSON / POJO支持。 你需要添加依赖/jar子。
添加所有这些
- 新泽西媒体JSON -jackson2.17
- jacksonJAXRS JSON的提供商- 2.3.2
- jackson核心-2.3.2
- jackson-数据绑定-2.3.2
- jackson的注解- 2.3.2
- jackson- JAXRS碱基2.3.2
- jackson模块JAXB的注释- 2.3.2
- jersey实体过滤-2.17
有了Maven,下面将把所有上面的内容都拉进去
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.17</version> </dependency>
对于任何未使用Jersey 2.17的读者(并且直接使用jar而不是Maven),您可以到这里find您正在使用的Jersey版本,并查看您需要的传递依赖版本。 这个Jersey依赖的当前版本使用Jackson 2.3.2。 这是你需要注意的主要事情。
检查你的REST调用contentType。 它应该是contentType:'application / json',如果你将json数据传递给POJO类。
我认为你发布请求正常工作,但你的浏览器/邮递员不能分析从服务返回的响应。 它正在返回纯文本和邮差正在等待JSON。 将Produce注解添加到您的Web服务并将其设置为json。 我也build议你与Fiddler2检查看到确切的信息通过电线。
在这个网页和其他网页上都经过了很多答案,但都无济于事。 这实际上为我工作:
方法1:不是将JSONObject
作为parameter passing给资源方法,而是传递一个String
。 采取String
并创build一个JSONObject
,然后你可以在你的代码中使用它。 像这样,
@Path("/people") @POST @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response doGetperson(String jsonRequest) { try { JSONObject requestedJSON = new JSONObject(jsonRequest); //So now you can use requestedJSON object created to do your stuff return Response.ok("{\"name\":" + requestedJSON.getString("user") + "}").build(); } catch (Exception ex) { return Response.ok("{ \"name\":\"\"}").build(); } }
方法2:
从2017年9月起添加这种依赖关系:
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-moxy --> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-moxy</artifactId> <version>2.26</version> </dependency>
从这里引用