我有两个类,一个是 UserInformation,另一个是 UserAddress,我在 UserInformation 类中添加了 UserAdress 类,为此创建了 setter 和 getter。并使用 JAX-RS(RESTEasy) 创建 Web 服务,但是当我使用 ajax 调用发送请求时,它显示错误。我的代码如下。
这是我的 UserAddress 类:
package com.my.DTO;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JacksonInject;
@XmlRootElement(name="UserAddress")
public class UserAddress implements Serializable{
private int streetNo;
private String city;
private String state;
private int pinCode;
@XmlElement
public int getStreetNo() {
return streetNo;
}
public void setStreetNo(int streetNo) {
this.streetNo = streetNo;
}
@XmlElement
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@XmlElement
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@XmlElement
public int getPinCode() {
return pinCode;
}
public void setPinCode(int pinCode) {
this.pinCode = pinCode;
}
}
这是我的 UserInformation 类:在这个类中,我为 UserAddress 类创建了 setter 和 getter。
package com.my.DTO;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.http.entity.SerializableEntity;
import org.codehaus.jackson.annotate.JsonProperty;
@XmlRootElement(name="UserInformation")
public class UserInformation implements Serializable {
private String name;
private int age;
private int roll;
private UserAddress userAdd;
@XmlElement
public UserAddress getUserAdd() {
return userAdd;
}
public void setUserAdd(UserAddress userAdd) {
this.userAdd = userAdd;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@XmlElement
public int getRoll() {
return roll;
}
public void setRoll(int roll) {
this.roll = roll;
}
}
这是我的获取和发布方法的 RESTEasy Web 服务:
package com.my.app;
import javax.jws.soap.SOAPBinding.Use;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.codehaus.jettison.json.JSONObject;
import com.my.DTO.UserAddress;
import com.my.DTO.UserInformation;
import com.my.DTO.UserSuccess;
@Path("/info")
public class ShowUserInfo {
@GET
@Path("/get")
@Produces(MediaType.APPLICATION_JSON)
public UserInformation getProductInJSON() {
UserInformation infoObj = new UserInformation();
UserAddress userAddress=new UserAddress();
userAddress.setCity("New Delhi");
userAddress.setState("Delhi");
userAddress.setStreetNo(447);
userAddress.setPinCode(110092);
infoObj.setName("Ravi Raj");
infoObj.setAge(21);
infoObj.setRoll(101);
infoObj.setUserAdd(userAddress);
return infoObj;
}
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createProductInJSON(UserInformation infoObj) {
return Response.status(200).entity(infoObj).build();
}
}
以下是我对 Web 服务的获取和发布请求的 jquery ajax 调用。
这是我的要求:
var uri="http://localhost:8080/WebServiceUsingRESTful/";
var studentData;
function checkWebService(){
$.ajax({
url : uri+"rest/info/get" ,
type : 'GET',
contentType : 'application/json; charset=utf-8',
// request data type
dataType : 'json',
cache: false,
success : function(data, status, req) {
alert("pass calling api");
var responseJsonObj = JSON.parse(req.responseText);
printData(responseJsonObj);
},
error : function(req, status, error) {
alert("Fail calling APi");
},
// set user basic authentication data into request header
/*beforeSend : setHeader*/
});
}
这工作正常。我有 json 数组。哪个是对的。
但是,当我们使用此代码发布服务数据时,这会显示错误。
function insertData(){
var request = new Object();
request.name=$('#userNameFld').val();
request.roll=$('#rollFld').val();
request.age=$('#ageFld').val();
request.userAdd.streetNo=$('#streetFld').val();
request.userAdd.city=$('#cityFld').val();
request.userAdd.state=$('#stateFld').val();
request.userAdd.pinCode=$('#pinFld').val();
$.ajax({
url : uri+"rest/info/post" ,
type : 'POST',
contentType : 'application/json; charset=utf-8',
data : JSON.stringify(request),
// request data type
dataType : 'json',
cache: false,
success : function(data, status, req) {
alert("Api working Fine..!!");
var responseJsonObj = JSON.parse(req.responseText);
$('#insertDivId').show();
},
error : function(req, status, error) {
alert("Fail calling APi");
},
// set user basic authentication data into request header
/*beforeSend : setHeader*/
});
}
此调用显示 streetNo 的错误,如下所示: Uncaught TypeError: Cannot set property 'streetNo' of undefined 但是如果我们放置了这样的代码。
function insertData(){
var request = new Object();
request.name=$('#userNameFld').val();
request.roll=$('#rollFld').val();
request.age=$('#ageFld').val();
request.userAdd{"city":$('#cityFld').val(),"streetNo":$('#streetFld').val(),"state":$('#stateFld').val(),"pinCode":$('#pinFld').val()};
$.ajax({
url : uri+"rest/info/post" ,
type : 'POST',
contentType : 'application/json; charset=utf-8',
data : JSON.stringify(request),
// request data type
dataType : 'json',
cache: false,
success : function(data, status, req) {
alert("Api working Fine..!!");
var responseJsonObj = JSON.parse(req.responseText);
$('#insertDivId').show();
},
error : function(req, status, error) {
alert("Fail calling APi");
},
// set user basic authentication data into request header
});
}
这工作正常,但这不是使用 ajax 调用发送请求对象的有效方式。
请仔细阅读我的代码,并为我提供有关此问题的任何想法。非常感谢..!!注意:如果有人有好的 JAX-RS 教程链接..请为我添加链接。谢谢