Условие поиска Select2 не отправляется на конечную точку моего контроллера - PullRequest
1 голос
/ 09 апреля 2020

У меня есть select2 (который использует AJAX запрос для извлечения данных из удаленного источника, в моем случае это SpringBoot API). Мне удалось получить данные, которые я хотел. Однако у меня возникают проблемы с получением в моей конечной точке поискового запроса, поэтому я могу отфильтровать результаты на основе того, что пользователь вводит:

Ниже мой код, и запрос AJAX с select2, и мой Конечная точка SpringBoot с соответствующей функцией.

$(".select2-single").select2({
     ajax: {
        url: 'http://localhost:8080/credenciamento/busca-procedimentos/',
        dataType: 'json',
        delay: 500,
        data: function (params) {
           console.log(params.term);
           return {
                q: params.term, // search term
           };
        },
        processResults: function (response) {
            var procedures = [];
            for (let i = 0; i < response.length; i++) {
                procedures.push({
                    id: response[i].id, 
                    text: response[i].descricao
                })
            }
            return { results: procedures }
        },
        cache: true,
    },
});

И здесь моя Java функция:

@GetMapping(path = "/credenciamento/busca-procedimentos/")
@ResponseBody
public List<Procedimento> buscaProcedimentos(@PathVariable(value = "q", required = false) String query) {
    System.out.println(query);

    List<Procedimento> procedimentos = procedimentoService.findAll();
    int size = procedimentos.size();

    if (StringUtils.isEmpty(query)) {
        return procedimentos.subList(0, size);
    }

    Procedimento[] procedimentosArray = new Procedimento[size];
    procedimentosArray = (Procedimento[]) procedimentos.toArray();

    return (List<Procedimento>) Arrays.stream(procedimentosArray)
    .filter(procedimento -> 
            procedimento.getDescricao().toLowerCase().contains(query)
    ).limit(2);
}

PS: каждый раз, когда функция выполняется, мой результат system.out.println равен нулю. Я попытался изменить с @PathVariable на @RequestParam, но он выдает исключение, говоря, что из запроса не было получено никаких параметров, и я попытался изменить маршрут на «/ credenciamento / busca-procdimento / {query}», но каждый раз запрашивать имеет значение null, и в этом случае функция даже не выполняется, поскольку в запросе нет запроса.

Ответы [ 3 ]

0 голосов
/ 20 апреля 2020

То, как вы использовали переменную пути, неверно. Прежде всего переменные пути являются частью сформированной ссылки. Таким образом, ваш URL-адрес get mapping становится @GetMapping(path = "/credenciamento/busca-procedimentos/{q}").

Вторая ошибка, которую вы совершаете, заключается в вашем запросе AJAX. Когда вы используете переменную пути, ваш URL в запросе ajax должен содержать строку запроса. Таким образом, ваш URL-адрес становится эффективным - url:'http://localhost:8080/credenciamento/busca-procedimentos/queryString'

Таким образом, вы можете сравнить два URL-адреса, и они должны точно совпадать. Ваше /{q} в весеннем сопоставлении запроса относится к /queryString в AJAX URL запроса.

Для получения дополнительной информации вы можете посетить

https://www.journaldev.com/3358/spring-requestmapping-requestparam-pathvariable-example

Это правильный способ использования переменных пути. Сделайте эти два изменения, и это должно сработать.

0 голосов
/ 22 апреля 2020

Я понял, в чем проблема. Это не было из-за моего запроса или чего-то связанного с select2. Проблема была в том, как я справлялся с фильтрацией. Я пытался следовать учебнику, однако это было с массивом. Поскольку в моем случае мне нужен был список, я пытался его адаптировать, но безуспешно. Я просто удалил все эти логи фильтрации c и отфильтровал вручную, перебрав свой список и добавив в свой ответ только те процедуры, которые имели в своем описании строку запроса. PS: @PathVariable не нужно, правильный путь с @RequestParam, и маршрут должен быть таким же. Без / {q} в конце.

0 голосов
/ 20 апреля 2020

Вот пример использования PathVariable Spring mvc @ PathVariable .

  1. В вашем коде отсутствует буква "q" в конце URL
    @GetMapping(path = "/credenciamento/busca-procedimentos/"),
    @ResponseBody
    public List<Procedimento> buscaProcedimentos(@PathVariable(value = "q", required = 
    false) String query) {
    System.out.println(query);
Правильный путь
    @GetMapping(path = "/credenciamento/busca-procedimentos/{q}"),
    @ResponseBody
    public List<Procedimento> buscaProcedimentos(@PathVariable(value = "q", required = 
    false) String query) {
    System.out.println(query);
Эта ссылка имеет несколько способов сделать это: https://www.baeldung.com/spring-optional-path-variables
...