Как сделать запрос к контроллеру REST и использовать данные в моем JSP с ajax и jquery? - PullRequest
0 голосов
/ 24 октября 2019

Как видно из заголовка, я не уверен, как сделать запрос к контроллеру, получить данные и использовать их на моем jsp. Допустим, у меня есть этот контроллер, который возвращает мне список объектов User, List

    @RequestMapping(value = "/findUsers", method = {RequestMethod.GET, RequestMethod.PUT}, consumes = {MediaType.APPLICATION_JSON_VALUE}, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<BaseAjaxResponse<List<UserDto>>> findUsers( @RequestBody UsersDto utenteDto ){
    //LOGIC GOES HERE
    return ResponseEntity.status(status).body(response);
}

, теперь в моем JSP-файле я написал что-то вроде этого.

    <form>
       <input type="text" placeholder="name" id="name" value="name">
       <input type="text" placeholder="surname" id="surname" value="surname">
     <button type="submit" id="search">
    </form>

это мойjs.

     $("#search").click( function(evt){
    evt.preventDefault();
    searchUser();
}

    function searchUser(){
    var Url = "/findUsers"
    var User = new Object();
    User.name = $("#name").val();
    User.surname = $("#surname").val();
    $.ajax({
    url : handleContattoUrl,
    dataType : 'json',
    contentType : 'application/json; charset=UTF-8',
    type : 'POST',
    data: JSON.stringify(User)
});

и вот я застрял ... Как мне вернуть данные и использовать их?

1 Ответ

1 голос
/ 24 октября 2019

Прежде всего, я бы хотел, чтобы все было просто.

Возможно, измените свой контроллер следующим образом. Важно, чтобы вы указали контроллеру, какие параметры вы хотите обработать. Вы можете использовать @RequestParam или @PathVariable, чтобы сообщить контроллеру, какие данные вы хотите отправить ему.

@RequestMapping(value="/findUsers") 
public @ResponseBody String findUsers (
    @RequestParam (required=false) String name, 
    @RequestParam (required=false) String surname) {

    ... // do something with the params

    return "everything worked fine";
}

Здравый смысл говорить контроллеру, что он отвечает за всю часть доменапоскольку это делает ваш код более понятным.

@Controller
@RequestMapping(value="/user")

Если вы сделаете это так, вам не понадобится косая черта в вашей функции.

@RequestMapping(value="findUsers")

Таким образом, URL запроса будет "mydomain.com/user/findUsers "

Также важно, чтобы в вашем html-коде для полей ввода был установлен атрибут name, поскольку это имя параметра, на который ссылается контроллер при проверке запроса. В противном случае ваш контроллер не будет знать, какие параметры он будет обрабатывать. Вот так

<input type="text" placeholder="name" id="name" value="name" name="name">

И последний, но не менее важный, ваш ajax-запрос. Обычно вам не нужно указывать тип данных ответа, так как он будет выбран автоматически. URL-адрес не написан напрямую, потому что таким образом, URL-адрес всегда будет работать неважно, если вы находитесь в среде тестирования или в вашей действующей системе. Вы можете импортировать JSTL, используя этот тег.

var name = $("#name").val();
var surname = $("#surname").val();

$.ajax({
    type: "POST",
    url: "<c:url value='/user/findUsers' />",
    data: {name: name, surname: surname},
    success: function(result) {
        ... // do something on success
    },
    error: function(error) {
        ... // catch error
    }
});

Это прекрасно работает для меня даже с гораздо более сложными вариантами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...