【问题标题】:Jersey 2.22 and json unsupported media typeJersey 2.22 和 json 不受支持的媒体类型
【发布时间】:2015-11-02 14:06:57
【问题描述】:

我正在创建一个 REST Web 服务,并且我想使用一个 json/xml 对象。我正在使用球衣,当我尝试发布请求时,我得到一个 415 错误不支持的媒体类型。 这是pom依赖

<dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.22</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.22</version>
    </dependency>

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

web.xml

servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>
        org.glassfish.jersey.servlet.ServletContainer
    </servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>
            provider packages
        </param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.glassfish.jersey.media.multipart.MultiPartFeature; 
            org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature,
            org.glassfish.jersey.jackson.JacksonFeature
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

和网络服务

@POST
@Path("FooPath")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public void insertFoo(FooClass fc){
    System.out.println(fc.getFoo());
}

谁能帮帮我?

【问题讨论】:

  • 那么您如何发布请求?它的内容类型可能不是 xml 也不是 json。
  • 为了测试,我使用 html 页面发布请求。这是一个具有此值的简单表单 method="post" enctype='application/json'

标签: java json web-services rest


【解决方案1】:

您尝试使用表单提交发送application/json 请求,其中表单enctype 设置为application/json

很遗憾enctype只支持these values

  • application/x-www-form-urlencoded(默认)
  • multipart/form-data
  • text/plain(在 HTML5 中)

浏览器默默地忽略 enctype 并且您的服务器拒绝该请求,因为它很可能是 application/x-www-form-urlencoded

为了以 json 格式发送请求,您需要从 Javascript 创建适当的 Ajax 请求。这是example 的操作方法。

【讨论】:

  • @Luca 我认为您应该首先验证(例如使用 Firebug)您原始请求中的内容类型不是我分析的预期application/json。这个问题到此结束。如果您无法让 Ajax 请求正常工作,您应该发布一个新问题。
  • 我试过这个但不起作用 var frm = $(document.myform); var dat = JSON.stringify(frm.serializeArray()); alert("我要发布这个:\n\n" + dat); $.post(frm.attr("action"), dat, function(data) { alert("Response: " + data); } );
猜你喜欢
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
相关资源
最近更新 更多