当前位置: 首页 > 知识库问答 >
问题:

POST to Jersey REST服务获取错误415不支持的媒体类型

邬阳
2023-03-14

我正在Jersey和Tomcat上使用JAX-RS web应用程序。Get请求没有问题,但是当我尝试发布JSON时,我得到了HTTP状态415——不支持的媒体类型。

这是我简单的HelloWorld。爪哇:

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

以下是我在Postman中尝试的请求(带有'application/json'标题):

我正在使用:

  • Java 7 x64
  • 泽西岛2.17
  • Tomcat 7.0.62 x64

谢谢

共有3个答案

车子平
2023-03-14

检查你的REST通话内容类型。如果要将json数据传递给POJO类,则应该是contentType:“application/json”。

国景铄
2023-03-14

浏览了本页和其他页上的许多答案,但都无济于事。这对我来说确实有效:

方法1:不是将JSONObject作为参数传递给资源方法,而是传递String。获取String并用它创建一个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>

从这里参考

龙嘉誉
2023-03-14

Jersey发行版没有现成的JSON/POJO支持。您需要添加依赖项/jar。

把这些都加进去

  • jersey-media-json-jackson-2.17
  • jackson-jaxrs-json-provider-2.3.2
  • jackson-core-2.3.2
  • jackson-databind-2.3.2
  • jackson-annotations-2.3.2
  • jackson-jaxrs-base-2.3.2
  • jackson-module-jaxb-annotations-2.3.2
  • jersey-entity-filtering-2.17

有了Maven,下面将把上面的一切都拉进去

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.17</version>
</dependency>

对于任何未来不使用泽西2.17(并且直接使用jars而不是Maven)的读者,您可以在此处找到您正在使用的泽西版本,并查看您需要哪些传递依赖版本。此泽西依赖项的当前版本使用Jackson 2.3.2。这是您需要注意的主要内容。

 类似资料:
  • 我必须做的是,我必须在给定的URL中发布JSON数据,其中JSON看起来像 和我的功能 当我张贴它的时候;我得到一个错误 “远程服务器返回错误:(415)不支持的媒体类型。” 有人知道吗;我错在哪里?

  • 问题内容: 我正在使用JSON请求调用REST服务,并且它以错误响应。 请求内容类型设置为。 如果我在请求中不包含JSON对象,则效果很好。我正在使用JSON库。 我尝试使用几个不同的库,但这没什么区别。 有人可以帮我解决这个问题吗? 这是我的代码: 的值为: 问题答案: 不确定原因,但是从中 删除行解决了该问题。

  • 我用JSON请求调用REST服务,它用HTTP 415“不支持的媒体类型”错误进行响应。 请求内容类型设置为。 如果我在请求中不包含JSON对象,它就可以正常工作。我正在使用JSON库。 我试着使用了几个不同的库,但没有什么不同。 有人能帮我解决这个问题吗? 这是我的代码: 是:

  • 问题内容: 我正在用JSON请求调用REST服务,它给出了Http 415“不支持的媒体类型”错误。 请求内容类型设置为(“ Content-Type”,“ application / json; charset = utf8”)。 如果我在请求中不包含Json对象,则效果很好。我正在使用json的google-gson-2.2.4库。 我尝试使用几个不同的库,但这没什么区别。 有人可以帮我解决这

  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道