1

我有两个类,一个是 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 教程链接..请为我添加链接。谢谢

4

1 回答 1

0

您需要在向其添加内容之前声明 request.userAdd

function insertData(){
  var request = new Object();
  request.name=$('#userNameFld').val();
  request.roll=$('#rollFld').val();
  request.age=$('#ageFld').val();

  request.userAdd = {} // <--- Declare userAdd

  request.userAdd.streetNo=$('#streetFld').val();
  request.userAdd.city=$('#cityFld').val();
  request.userAdd.state=$('#stateFld').val();
  request.userAdd.pinCode=$('#pinFld').val();

但为什么是

data : JSON.stringify(request)

不是一个有效的请求?

问候

于 2013-05-03T13:15:52.320 回答