我正在尝试将json String从ajax调用发送到jersey web服务。我看了很多相关的问题和文章,但我还没有得到任何工作。当我从提琴手看我的电话时,我可以看到身体中的json但是当方法被击中时,String是空白的。谢谢你的帮助。
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();
}
答案 0 :(得分:0)
如果你说你使用了application / json,那么我认为你需要提供一个Java对象来为你提供的JSON建模。
如果您只想将JSON作为String,那么您需要使用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注释。
答案 1 :(得分: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文件,希望我不需要问如何获得我的工作(但如果有人有他们引以为豪的方法,并想分享你'非常欢迎)。 谢谢你的帮助。