java - 在 jquery ajax 调用 jax-rs(resteasy) 中显示错误

标签 java jquery jakarta-ee jax-rs resteasy

我有两个类,一个是 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 服务的 get 和 post 请求的 jquery ajax 调用。

这是我对 get 的调用:

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 的错误,如下所示:未捕获类型错误:无法设置未定义的属性“streetNo” 但如果我们放置这样的代码。

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

    });
}

这工作正常,但这不是使用 ajex 调用发送请求对象的有效方式。

请仔细检查我的代码并给我关于这个问题的任何想法。 多谢..!! 注意:如果有人有好的 JAX-RS 教程链接..请为我添加链接。谢谢

最佳答案

在向其中添加内容之前,您需要声明 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)

不是有效的请求?

问候

关于java - 在 jquery ajax 调用 jax-rs(resteasy) 中显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356680/

相关文章:

java - 我的 Glassfish 异常报告 HTTP 状态 500 -

java - 泛型,Guava Ordering.arbitrary()

javax.xml.datatype.Duration 只返回秒数

javascript - 如何在弹出窗口中显示移动预览

javascript - jQuery 正确切换 div

javascript - 旋转自定义图像作为下拉菜单中的箭头

java - jws 应用程序无法加载 swing-layout

Java - Enumerable.Cast() 像 C#?

java - 将 URL 重定向到另一个应用程序

java - 无法启动服务 jboss.persistenceunit : org. hibernate.service.UnknownServiceException