2017-07-01 96 views
0

我想嘗試使用JQuery AJAX將JSON數據發送到JAX-RS Web服務,但是我面臨一個問題。從JavaScript發送JSON到JAX-RS

我在JAX-RS上的方法使用JSON並生成JSON,但是當我試圖發送JSON數據時,我的方法沒有收到任何參數。我錯過了什麼?

這裏我已經試過

function callApi(counter){ 
    var apiDat = {param1:counter}; 

    $.ajax({ 
     type: 'POST', 
     url: 'http://localhost:8080/xdbg/webresources/generic/value', 
     data: JSON.stringify(apiDat), 
     crossOrigin: true, 
     dataType: 'json',   
     contentType: 'application/json; charset=utf-8', 
     crossDomain: true, 
     success: function(data) { 
      console.log(data); 
     } 
    }); 
} 

$(function() { 
    callApi(123); 
}); 

上應注意,我使用的方法調用CORS:

@Path("generic") 
public class GenericResource implements ContainerResponseFilter{ 
@Context 
private UriInfo context; 

@Override 
public void filter(final ContainerRequestContext requestContext, 
        final ContainerResponseContext cres) throws IOException { 
    cres.getHeaders().add("Access-Control-Allow-Origin", "*"); 
    cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); 
    cres.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
    cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
    cres.getHeaders().add("Access-Control-Max-Age", "1209600"); 
} 

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/value") 
public String GetValue(
    @DefaultValue("") @QueryParam("param1") String param1 
)throws Exception{ 
    System.out.println("value = " + param1); 
    JSONObject outputJsonObj = new JSONObject(); 
    outputJsonObj.put("output", param1);   
    return outputJsonObj.toString(); 
} 

這裏是JSON格式:

{"output":"123"} 

我錯過了什麼? 謝謝

回答

0

您的JSON文檔正在正文請求中發送。

在您的Web服務端點中,您沒有檢索http正文,只有查詢參數,根據您的示例代碼,將始終爲空。

你必須做的是創建一個POJO類只有輸出特性,並與@XMLAnnotations對它進行註釋,像上面:

@XmlRootElement(name="payload") 
public class Payload { 

    @XmlElement(name="output") 
    public string output; 

} 

,然後改變你的方法調用接收POJO作爲參數像上面:

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
@Path("/value") 
public String GetValue(Payload param)throws Exception{ 

在這種情況下,JAX-RS容器將解析HTTP請求正文和創建將在你的方法被注入一個有效載荷的對象。

+0

已經嘗試過您的解決方案,我得到了'value = com.sun.xml.rpc.processor.modeler.j2ee.xml.string @ 875ffd'。即使我嘗試使用註解'@XmlAccessorType(XmlAccessType.FIELD)' '@XmlType(name =「param」,propOrder = { 「param1」 })'仍然得到相同的輸出 – NPE

+0

問題來自param1,I使用'string'而不是'String'。感謝您的協助。 – NPE