javascript - 使用 GET 将数据 POST 到 Restful api

标签 javascript jquery spring web-services grails

我正在尝试执行 GET 从 URL 检索数据,然后执行 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]]

最佳答案

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

关于javascript - 使用 GET 将数据 POST 到 Restful api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28501793/

相关文章:

spring - 如何在 Spring 获得同一个bean的多个实例?

java - 如何更改java中第3方库的日志级别

javascript - Phonegap 应用程序 : Shadows on clicking a button

jquery - .each() 完成后回调函数?

javascript - Highcharts : Two lines showing instead of one

jquery - 集成 Bootstrap、Jquery 和 Thymeleaf 的问题

jquery - 我需要向 jQuery UI 工具提示添加预延迟,但似乎无法弄清楚

java - 我需要在 native 查询 Jpa 中使用 @RequestParam 在后端级别对数据进行排序

javascript - 使用 Javascript 提取 Google Analytics UA 代码

javascript - 从 vuex 存储访问 $vuetify 实例属性