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> 

从这里引用