Как 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) {
// 处理获取用户列表逻辑
}
}
Надеюсь, эта статья будет вам полезна, спасибо за прочтение!