2013-05-03 2 views
1

У меня есть два класса один UserInformation, а другой UserAddress, я добавил класс UserAdress в класс UserInformation, созданный для этого сеттер и getter. И создайте веб-сервис, используя JAX-RS (RESTEasy), но когда я отправляю запрос, используя вызов ajax, он показывает erroe. Мой код следующий.Показать ошибку в jquery ajax call for jax-rs (resteasy)

Это мой 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.

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 веб-сервис, как для получения и после метода:

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(); 

    } 

} 

После мой 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*/ 
    }); 

} 

Это рабочие fine.I получили 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: Не удается установить свойство «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, добавьте ссылку для меня. Благодаря

ответ

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) 

не действительный запрос?

рассматривает

+0

Hi..Thanks для предоставления ответа .. Теперь мой апи Вызывающий работает, но если какое-либо решение для стороны веб-службы для удаления этого кода: request.userAdd = {}; , как и любая аннотация или что-либо, потому что, когда я создаю службу для разработчика интерфейса, у них всегда возникает проблема для объявления request.userAdd = {} ;. Если у вас есть какой-либо код или аннотация, чтобы управлять этой штукой со стороны службы, пожалуйста, предоставьте мне. Большое спасибо за ответ. Примечание. Я использую эти «данные: JSON.stringify (request)» для целей сериализации. если у вас есть решение для этого, пожалуйста, предоставьте меня. благодаря – user2346307