Можно ли выполнить проверку запроса путем внедрения зависимостей при весенней загрузке? - PullRequest
0 голосов
/ 13 мая 2019

== Фон ==
Я привык к инъекциям зависимостей, доступным в Laravel, где вы можете создать класс, расширяющий класс запроса, и поместить в него всю проверку, а затем повторно использовать ее внесколько методов контроллера.

== Текущий код ===
В настоящее время я пытаюсь сделать проект в Java Spring Boot, и мои методы контроллера теперь выглядят так:

    @RequestMapping("/list")
    @ResponseBody
    public DTResponse<Name> list(
            @RequestParam(defaultValue = "0") int draw,
            @RequestParam(defaultValue = "0") int start,
            @RequestParam(defaultValue = "0") int length,
            @RequestParam(name="search[value]", defaultValue = "") String search,
            @RequestParam(name="columns[0][search][value]", defaultValue = "") String firstname,
            @RequestParam(name="columns[1][search][value]", defaultValue = "") String lastname,
            @RequestParam(name="order[0][column]", defaultValue = "0") int sortColumn,
            @RequestParam(name="order[0][dir]", defaultValue = "asc") String sortOrder,
            @CookieValue String language,
            HttpServletResponse response,
            HttpServletRequest request
    )

И направить большинство из них в функцию проверки.

== Future ==
Я бы хотел заменить большинство из этих строк классом, который может выполнять проверку, и абстрагировать некоторыепараметров запроса в методах, чтобы их можно было легко использовать в нескольких методах.

== Вопрос ==
Как написать класс, который можно внедрить в методы контроллера, и запуститьпроверка и есть вспомогательные методы, которые могут анализировать параметры запроса?

== Alternativ ==
Могу ли я создать статическую функцию, которая может получать параметры введенного запроса, http-сервлеты и cookie?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Добавить к ответу @Antoniossss ...

Аннотация @Valid - путь сюда.

Вот небольшой пример.

@ModelAttribute("command")
public DTRequest setupCommand() {

    return new DTRequest;
}

@RequestMapping(value = "/list")
@ResponseBody
public DTResponse<Name> list(@ModelAttribute("command") @Valid DTRequest request, BindingResult bindingResult, RedirectAttributes redirectAttributes) {

    DTResponse<Name> response;

    if (bindingResult.hasErrors()) {

        // Do something here to let the client know that something went wrong.
        // You can throw and exception and catch it one way or another...

    } else {

        // Do your real work here...
    }

    return response;
}

Ваш командный объект может выглядеть следующим образом.

Примечание

I STRONGLY предлагает использовать строку для всех входящих значений, потому что, если значение, представленное клиентом, не соответствует ожидаемому типу (int, float, boolean и т. Д.), Spring будет выбрасывать исключение, над которым у вас мало контроля, и это исключение может быть весьма загадочным.

Тип по умолчанию, в который все значения могут входить как String, и поэтому рекомендуется использовать его в качестве наименьшего общего знаменателя, а затем проверять, можно ли привести введенное значение к требуемому типу, в данном случае int / integer.

public class DTRequest {

    @Digits
    private String draw = "0";

    @Digits
    private String start = "0";

    @Digits
    private String length = "0";

    // etc... per field.

    // Setters and getters...
    public void setDraw(String draw) {
        this.draw = draw;
    }

    public String getDraw() {
        return this.draw;
    }

    public int getDrawAsInt() {
        return Integer.valueOf(this.draw);
    }

    // etc... per setters and getters...
}
0 голосов
/ 13 мая 2019

Да, вы можете просто использовать аннотацию @Valid в аргументах для вызова встроенной или пользовательской проверки. Проверьте официальную документацию

https://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/validation.html

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