在grails中POST不起作用

时间:2014-06-11 12:44:42

标签: rest grails post

您好我正在尝试使用grails进行POST我尝试了2种不同的方法。 我想要复制这个curl命令:

 curl -F upload=@in.xml http://server.com/service.pl > out.xml

这个命令工作正常。 到目前为止我所尝试的是以下内容:

  def actualInputFile = new File("/path/to/file/in.xml");


    def retval = [success: false, message: null];


        HttpClient postClient = new HttpClient();
        MultipartPostMethod postMethod = new MultipartPostMethod('http://server.com/service.pl');
        postClient.httpConnectionManager.getParams().setSoTimeout(300000);

        postMethod.addParameter("upload",actualInputFile);

        int status = postClient.executeMethod(postMethod);
        def data = postMethod.getResponseBodyAsString();
        postMethod.releaseConnection();
         def returnedFile = new File("/path/to/file/out.xml");
            returnedFile.write(data);

这给出了500错误

我也尝试过:

  def actualInputFile = new File("/path/to/file/in.xml");

    def http = new HTTPBuilder( 'http://server.com/service.pl' )
    println "START POST"
    def postBody = [upload:actualInputFile] // will be url-encoded

    http.post( body: postBody,
            requestContentType: XML ) { resp ->

        println "POST Success: ${resp.statusLine}"
    }

这根本不起作用。

获得500的第一个使用折旧方法。

任何想法?

2 个答案:

答案 0 :(得分:0)

我假设您正在尝试从控制器运行此代码,如果是这样,我建议不要使用commons-httpclient,因为它会引入许多依赖项,因为通常难以使​​用。与Grails一起使用的推荐客户端是http://grails.org/plugin/rest-client-builder

您的示例可以写成:

def rest = new RestBuilder('http://server.com/service.pl' )
def resp = rest.post(url) {
   upload = new File("/path/to/file/in.xml")
}
println resp.status

然而,如果你必须使用commons-httpclient,那么如果你实际发布了你所看到的实际错误,那将会有什么帮助。只是说你没有发布错误消息而得到500就没有太大帮助。

答案 1 :(得分:0)

这有点令人困惑。从Perl和Curl看,您尝试将XML发布到API。那是对的吗?

如果是这样,你可以轻松地做到这一点,但你必须指定标题并构建你的api以接受XML并解释它。

然而,我可能会误解。