0

我正在尝试将 ajax 调用中的 json 字符串发送到球衣网络服务。我查看了许多相关的问题和文章,但我无法得到任何工作。当我从提琴手那里看到我的电话时,我可以看到正文中的 json,但是当方法被点击时,字符串是空白的。谢谢你的帮助。

getFile: function() {
    var urlXls = 'http://localhost:8080/KodiakWebS/Kodiak/KodiakXls/generateXls';
    //var json =  '{"xls":[{"name":"Pokemon","row":[{"data":"Lugia"},{"data":"Charzard"}]},{"name":"Types","row":[{"data":"Special"},{"data":"Fire"}]}]}';   //encodeURI();
    var json = this.get('tempJSON');
    urlXls = urlXls.replace(/\s/g, "");
    $.ajax({
        url: urlXls,
        type: "POST",
        data: json,
        contentType: 'application/json; charset=utf-8', // ;charset=utf-8',
        success: function(json, status)
            window.location.assign(json.url);
            alert("yay");
        },
        error: function(xhr, err) {
           debugger;
            alert(xhr+ " || " + err);
        }
    });
},

@POST
@Path("/generateXls")
@Consumes("application/json")
@Produces({ "application/xls" })
public Response sendWorkBook(final String json) throws Exception {
    createWorkbook(json);
    FileOutputStream sprdSht = new FileOutputStream("WorkBook.xls");
    wb.write(sprdSht);
    sprdSht.close();
    System.out.println("all done");
    StreamingOutput stream = new StreamingOutput() {
        @Override
        public void write(OutputStream outPut)
                throws IOException,
                WebApplicationException {
            try {
                wb.write(outPut);
            } catch (Exception e) {
                throw new WebApplicationException(e);
            }
        }

    };
    return Response.ok(stream).header("content-disposition", "attachment; filename = egisDoc.xls").build();
}
4

2 回答 2

0

多亏了 caprica 的建议并进行了一些修改,我才能让它工作。我的代码没有太大变化,但就是这样。

@PUT
@Path("/generateXls")
@Consumes("text/plain")
@Produces({ "application/xls" })
public Response sendWorkBook(String json) throws Exception {
    System.out.println("json: " + json);
    createWorkbook(json);

getFile: function() {
    var urlXls = 'http://localhost:8080/KodiakWebS/Kodiak/KodiakXls/generateXls';
    //var json =  '{"xls":[{"name":"Pokemon","row":[{"data":"Lugia"},{"data":"Charzard"}]},{"name":"Types","row":[{"data":"Special"},{"data":"Fire"}]}]}';   //encodeURI();
    var json = this.get('tempJSON');
    urlXls = urlXls.replace(/\s/g, "");
    $.ajax({
        type: "PUT",
        url: urlXls,
        data: json,
        contentType: 'text/plain; charset=utf-8',   // ;charset=utf-8',
        success: function(json, status) {
            window.location.href = json.url;
            //window.location.assign(json.url);
            //alert("yay");
        },
        error: function(xhr, err) {
           debugger;
            alert(xhr+ " || " + err);
        }
    });
},

现在开始尝试下载我的服务创建的 xls 文件,希望我不需要询问如何获得我的工作(但如果有人有他们引以为豪的方法并愿意分享你,我们非常欢迎也)。谢谢您的帮助。

于 2013-10-10T12:36:00.963 回答
0

如果您说您使用 application/json,那么我认为您需要提供一个 Java 对象来对您提供的 JSON 进行建模。

如果您只希望 JSON 作为字符串,那么您需要使用 text/plain。

当我使用 JAXRS 时,我通常有这个:

@PUT
@Path("entities")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public SomeDomainObject updateSomeEntity(SomeDomainObject someDomainObject) {
    // Whatever...
}

其中“SomeDomainObject”只是一个带有 getter 和 setter 的 POJO。

我通常使用 JacksonJsonProvider 实现而不是 JAXB 实现,并且上述控制器风格与 JSON 编组对我来说效果很好。我什至不需要向域对象添加任何 JSON 注释。

于 2013-10-08T15:06:10.993 回答