2015-01-20 3 views
0

У меня есть АЯКС вызов, где я называю RESTful WS передачи строки -Как захватить параметр данных из Ajax-вызова в Restful webservice?

var b2bValues = "Some String"; 
var lookupUrl = "http://ip:{port}/ImageViewer/rest/ImageServlet/callrest"; 
var lookupReq = $.ajax({url:lookupUrl, async:false, data:b2bValues, contentType: "application/xml", type: "POST"}); 

Мой Restful код является -

@POST 
@Path("/callrest") 
@Consumes({"application/xml", "application/json", "text/plain"}) 
@Produces({"application/xml", "application/json", "text/plain"}) 
public ImageFieldsList getImageFromSource(@QueryParam("b2bValues") String b2b) 
{//Some code 
} 

b2bValues ​​на стороне сервера является нулевым.

Мой вопрос заключается в том, как изменить код восстановления для захвата параметра данных, переданного из вызова Ajax?

ответ

2

Есть два способа решить проблему

  1. @QueryParam будет искать параметры, доступные в запросе URL. Так что, если вам нужно использовать @QueryParam на стороне сервера, вы будете необходимо изменить URL и отправить данные следующим образом:

    var b2bValues = "Some String"; 
    var lookupUrl = "http://ip:{port}/ImageViewer/rest/ImageServlet/callrest?b2bValues="+b2bValues; 
    var lookupReq = $.ajax({url:lookupUrl, async:false, contentType: "application/xml", type: "POST"}); 
    

    Не требуется на стороне сервера, в этом случае изменения.

  2. Обычно, для POST запросов, мы отправляем данные, формируя запрос объектов. Таким образом, на стороне клиента, вы бы сформировать объект запроса как этого:

    var requestData = { b2bValues : "SomeValue", 
            someOtherParam : "SomeOtherParamValue", 
            anotherParam : "AnotherParamValue" 
            } 
    var lookupReq = $.ajax({url:lookupUrl, async:false, data:JSON.stringify(requestData), contentType: "application/xml", type: "POST"}); 
    

    А на стороне сервера, вам нужно будет иметь эквивалентный объект значение для хранения данных запроса. Имена переменных членов должны соответствовать тем вы отправляете в запросе (или наоборот)

    Примера запрос объект

    // SampleRequestObject.java 
    String b2bValues; 
    String someOtherParam; 
    String anotherParam; 
    // getters and setters for these member variables 
    

    Теперь метод ReST изменится следующим образом:

    @POST 
    @Path("/callrest") 
    @Consumes({"application/xml", "application/json", "text/plain"}) 
    @Produces({"application/xml", "application/json", "text/plain"}) 
    public ImageFieldsList getImageFromSource(SampleRequestObject requestInput) { 
    // access request input using getters of SampleRequestObject.java 
    // For example, requestInput.getB2bValues(); 
    } 
    
+0

Благодарим за быстрый ответ. Но все же после внесения изменений код не работает. b2bValues ​​все равно null. – Rana

+0

Отредактировал мой ответ. –

+0

Да, вы правы. Спасибо за объяснение. – Rana

0

Это требует изменений в коде сервера -

@POST 
@Path("/callrest") 
@Consumes({"application/xml", "application/json", "text/plain"}) 
@Produces({"application/xml", "application/json", "text/plain"}) 
public ImageFieldsList getImageFromSource(String b2bValues) 
{//Some code 
} 

Не нужно использовать @Queryparam, но ключ должен совпадать с именем переменной.

Смежные вопросы