[英]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.