簡體   English   中英

將JSON從Javascript發送到JAX-RS

[英]Sending JSON from Javascript to JAX-RS

我想嘗試使用JQuery AJAX將JSON數據發送到JAX-RS Web服務,但遇到了問題。

我在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"}

我錯過了什么? 謝謝

您的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請求主體並創建一個有效負載對象,該對象將被注入您的方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM