我正在运行一个休息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
是此次通话所需的唯一参数。
由于
答案 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解析器自动解析。