GROOVY RESTClient:找不到请求内容类型的编码器* / *

时间:2015-04-10 20:49:23

标签: java api rest groovy

我正在运行一个休息POST请求,我在编译时收到此错误:

Caught: java.lang.IllegalArgumentException: No encoder found for request content type */*

这是我的代码:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7' )
import groovyx.net.http.RESTClient
def client = new RESTClient( 'http://localhost' )
def resp = client.post( path : '/services/adi/validateadimeta/fromfile',body : [ file:'foo' ] )

我不确定它是否响应可能是响应的重编码问题? */*让我担心它甚至没有联系。当我在命令行上将其作为CURL命令运行时,它可以正常工作。 file是此次通话所需的唯一参数。

由于

2 个答案:

答案 0 :(得分:7)

Refer docs on http-builder。具体地,

  

因为我们从未在RESTClient实例上设置默认内容类型   或者在此请求中传递contentType参数,RESTClient将放置   在请求标头中接受:/,并基于解析响应   响应内容类型标题中给出的任何内容。

修改,post()来电如下:

@Grab('org.codehaus.groovy.modules.http-builder:'http-builder:0.7' )
import groovyx.net.http.RESTClient
import static groovyx.net.http.ContentType.*

def client = new RESTClient( 'http://localhost' )
def resp = client.post( 
    path: '/services/adi/validateadimeta/fromfile',
    body : [ file : 'foo' ],
    requestContentType : JSON 
)

答案 1 :(得分:0)

当我添加" requestContentType:JSON "时,它返回" 错误请求" 它已更改为" requestContentType:URLENC ",它适用于我。

阅读documentation of RESTClient它为我解释

  

请注意,上面的示例是将请求数据发布为   应用程序/ x-WWW窗体-urlencoded。 (twitter API不支持   XML或JSON POST请求。)因此,requestContentType   必须指定参数才能识别请求体的方式   应序列化。

     

因为我们从未在RESTClient实例上设置默认内容类型   或者在此请求中传递contentType参数,RESTClient将放置   接受:请求标头中的 / ,并根据此解析响应   响应内容类型标头中给出的任何内容。因为   Twitter正确地将其响应标识为application / json,它会   由默认的JSON解析器自动解析。