对jax-rs web服务的http POST请求

时间:2013-12-20 08:21:09

标签: java web-services rest grails jax-rs

我在jax-rs框架中有一个grails网络服务响应PUT请求并使用/生成xml或json但是当我尝试通过chrome的高级rest插件将xml输入到Web服务时错误415 Unsupported Media Type
我想知道如何将xml输入Web服务?
注意:我使用application / xml作为内容类型 我的Web服务代码是:

     @Path('/api/interface')
        @Consumes(['application/xml','application/json'])
        @Produces(['application/xml','application/json'])
        class InterfaceResource {

        @POST
            @Path("xmldata")
            String  getInterfaceRepresentationXML(def xml) {
                //play with xml and render xml result
            }
        }

因此链接将是x.x.x.x/api/interface/xmldata,并且不接受XML文件。 请提前帮助,谢谢。

2 个答案:

答案 0 :(得分:0)

您是否将内容类型设置为application/xml而非默认application/x-www-form-urlencoded

或者,您的应用程序中是否有另一个端点,其中包含以下URL模板:

x.x.x.x/api/interface/{param} 

还会消耗PUT个请求但不接受application/xml内容类型? (我不确定JAX-RS实现会选择哪种资源方法)

答案 1 :(得分:0)

在服务器端

@Consumes和@Produces指令应绑定到该方法。 另外,验证你所需的http方法是@POST(在这种情况下很少使用PUT方法,但如果你真的想这样,你可以自由地使用PUT。)

@POST
@Path("xmldata")
@Consumes('application/xml')
@Produces('application/xml')
String getInterfaceRepresentationXML(def xml) {
    //play with xml and render xml result
}

在客户端

确保您的客户端使用正确的http方法(POST或PUT,如服务器端声明的那样)。 在http post内容中提供xml数据是不够的,您还必须告知服务器您提供给它的数据类型。您必须在http标头中提供内容类型。

在Chrome的高级休息客户端中,请在标题中指定:

Content-Type: application/xml