2013-10-08 30 views
0

我正在嘗試從ajax調用發送json字符串到澤西網絡服務。我已經看過很多相關的問題和文章,但我一直無法獲得任何工作。當我從小提琴手看我的調用時,我可以看到體內的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(); 
} 

回答

0

感謝來自鸚鵡的建議和修補一下,我能夠得到它的工作。在我的代碼中沒有太多變化,但在這裏。

@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文件,我的服務造成的,希望我不會要問如何得到我所工作(但如果任何人有他們的驕傲和希望的方法分享你更受歡迎)。 感謝您的幫助。

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... 
} 

其中,「一些領域對象」僅僅是一個getter和setter POJO。

我通常使用JacksonJsonProvider實現而不是JAXB,而上面的控制器風格對於我來說JSON編組很好。我甚至不需要將任何JSON註釋添加到域對象中。

+0

感謝您的建議。我能夠使它與一些有點不同的工作,但你幫助我走向正確的方向。我會張貼我8小時後的事情。謝謝您的幫助。 – user2592413