Как Spring Boot использует @RequestParam для проверки данных

Как Spring Boot использует @RequestParam для проверки данных

В веб-приложениях пользовательские данные обычно передаются в виде параметров запроса. В Spring Boot @RequestParamаннотации для получения параметров запроса. Но как обеспечить достоверность этих параметров запроса? В этой статье мы расскажем, как использовать @RequestParamаннотации для проверки данных, и предоставим несколько примеров кода, которые помогут вам лучше понять.

вставьте сюда описание изображения

Введение в @RequestParam

В Spring Boot @RequestParamаннотации используются для получения значений параметров из запроса. По умолчанию параметры обязательны, и если параметр не включен в запрос, будет выдано MissingServletRequestParameterExceptionисключение . Однако вы можете использовать requiredатрибут , чтобы сделать параметр необязательным.

Например, следующий код использует @RequestParamаннотации для получения idпараметра запроса с именем :

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id, @RequestParam Long status) {
    // 处理获取用户逻辑
}

В приведенном выше коде @RequestParamаннотация используется для получения параметра запроса statusс именем . Исключение выдается , если запрос не включает statusпараметр MissingServletRequestParameterException.

Валидация данных

Чтобы обеспечить достоверность параметров запроса, вы можете использовать аннотации в javax.validation.constraintsпакете для проверки параметров запроса. Например, следующий код использует @Minаннотации для проверки idминимального значения параметра:

@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(1) Long id) {
    // 处理获取用户逻辑
}

В приведенном выше коде @Minаннотация используется для проверки того, что минимальное значение idпараметра равно 1. Если idаргумент меньше 1, MethodArgumentNotValidExceptionбудет выдано исключение.

В дополнение к @Minаннотациям существует множество других аннотаций, которые можно использовать для проверки параметров запроса. Например, @Maxаннотации используются для проверки максимального значения параметра, @NotBlankаннотации используются для проверки того, не является ли строка пустой, @Emailаннотации используются для проверки формата адреса электронной почты и т. д.

пользовательское сообщение об ошибке

По умолчанию создается MethodArgumentNotValidExceptionисключение . Однако вы можете использовать messageэтот атрибут для указания пользовательского сообщения об ошибке.

Например, следующий код использует пользовательское сообщение об ошибке для проверки минимального значения idпараметра :

@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(value = 1, message = "id 必须大于等于 1") Long id) {
    // 处理获取用户逻辑
}

В приведенном выше коде мы используем messageатрибут для указания пользовательского сообщения об ошибке. Если idаргумент меньше 1, MethodArgumentNotValidExceptionбудет выдано исключение с пользовательским сообщением об ошибке.

Комбинированная проверка

Иногда может потребоваться выполнить комбинированную проверку нескольких параметров запроса. Например, может потребоваться убедиться, что startпараметр меньше endпараметра. В этом случае вы можете использовать @Validаннотации и пользовательские объекты для реализации комбинированной проверки.

Вот пример кода, который использует пользовательский объект DateRangeдля объединения контрольной суммы startи endпараметров :

public class DateRange {
    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate start;

    @NotNull
    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private LocalDate end;

    // getters/setters omitted
}

@GetMapping("/users")
public List<User> getUsers(@Valid DateRange dateRange) {
    // 处理获取用户列表逻辑
}

В приведенном выше коде мы используем @Validаннотации для проверки DateRangeобъекта. DateRangeОбъект startсодержит endсвойства и, @NotNullкоторые @DateTimeFormatпроверяются с помощью аннотаций и соответственно. Если startбольше end, будет выдано MethodArgumentNotValidExceptionисключение .

Подведем итог

В этой статье мы рассказали, как использовать @RequestParamаннотации для получения параметров запроса и использовать javax.validation.constraintsаннотации в пакете для проверки параметров запроса. Мы также покажем, как повысить гибкость проверки данных с помощью настраиваемых сообщений об ошибках и комбинированных проверок. С помощью этих примеров кода вы сможете лучше понять, как использовать @RequestParamдля .

Вот полный пример кода:

@RestController
public class UserController {
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable @Min(value = 1, message = "id 必须大于等于 1") Long id) {
        // 处理获取用户逻辑
    }

    public class DateRange {
        @NotNull
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        private LocalDate start;

        @NotNull
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
        private LocalDate end;

        // getters/setters omitted
    }

    @GetMapping("/users")
    public List<User> getUsers(@Valid DateRange dateRange) {
        // 处理获取用户列表逻辑
    }
}

Надеюсь, эта статья будет вам полезна, спасибо за прочтение!

Supongo que te gusta

Origin blog.csdn.net/2302_77835532/article/details/131341713
Recomendado
Clasificación