使用GET将数据发布到restful api

时间:2015-02-13 14:28:36

标签: javascript jquery spring web-services grails

我正在尝试GET从网址中检索数据,然后将POST检索到RESTful API。 get调用似乎工作正常,但服务器在file参数中看不到任何内容。我已经验证GET调用是返回pdf流数据,并将其放在FormData arg中。

这是完整的电话

function upload(key, url){

    var file;
    /* get data from url */
    $.ajax({
        url: url,
        type: 'GET',
        async: false,
        cache: false,
        dataType : 'text',
        contentType : 'application/pdf',
        success: function( data ) {
            file = data;
        },
        error: function(xhr, status, error) {
            console.log("error logging: "+  error);
        }
    });

    /* send data to api */
    var data = new FormData();
    data.append("key", key);
    data.append("file", file); //<-- this has pdf stream data

    $.ajax({
        url: ROOT_URL + "/api/account/upload", 
        type: 'POST',
        cache: false,
        async: false,
        enctype: 'multipart/form-data',
        processData: false,
        contentType: false,
        data: data,
        success: function( data ) {
            console.log("Uploaded!");
        },
        error: function(xhr, status, error) {
            console.log("error logging: "+  error);
        },
        dataType: "json"
    });
};

这是服务器端(grails + spring + jaxrs)

@POST
@Path('upload')
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces('application/json')
String upload(@Context HttpServletRequest request){
    GrailsWebRequest w = WebUtils.retrieveGrailsWebRequest()
    MultipartFile multipartFile = w.getRequest().getFile('file');

    println("request:" + request)
    println("multipartFile:" + multipartFile)
    println("parameterMap:" + w.getRequest().getParameterMap() )

    return ['okay':'uploaded'] as JSON
}

目前正在打印出来:

request:org.grails.jaxrs.web.RequestWrapper@448593df
multipartFile:null
parameterMap:[file:[], key:[c07fc0974ebb4f3a8fc21e3d002152d4]]

1 个答案:

答案 0 :(得分:2)

看起来当POST调用发生时,变量文件还没有值。由于在服务器返回数据之后,您希望GET调用之后发生所有事情,因此您应该将该代码移动到一个成功调用的单独函数中。