Como o Spring Boot usa @RequestParam para validação de dados
Em aplicativos da Web, os dados enviados pelo usuário geralmente são passados na forma de parâmetros de solicitação. No Spring Boot, @RequestParam
as anotações para obter parâmetros de solicitação. Mas como você garante a validade desses parâmetros de solicitação? Neste artigo, apresentaremos como usar @RequestParam
anotações para validação de dados e forneceremos alguns exemplos de códigos para ajudá-lo a entender melhor.
Introdução ao @RequestParam
No Spring Boot, @RequestParam
as anotações são usadas para obter os valores dos parâmetros da solicitação. Por padrão, os parâmetros são obrigatórios e MissingServletRequestParameterException
uma exceção . No entanto, você pode usar required
o atributo para tornar um parâmetro opcional.
Por exemplo, o código a seguir usa @RequestParam
anotações para obter id
um parâmetro de solicitação chamado:
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id, @RequestParam Long status) {
// 处理获取用户逻辑
}
No código acima, @RequestParam
a anotação é usada para obter o parâmetro de solicitação status
chamado . Uma exceção é lançada se a solicitação não incluir status
o parâmetro MissingServletRequestParameterException
.
Data de validade
Para garantir a validade dos parâmetros de solicitação, você pode usar as anotações no javax.validation.constraints
pacote para verificar os parâmetros de solicitação. Por exemplo, o código a seguir usa @Min
anotações para validar id
o valor mínimo do parâmetro:
@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(1) Long id) {
// 处理获取用户逻辑
}
No código acima, @Min
a anotação é usada para verificar se o valor mínimo do id
parâmetro é 1. Se id
o argumento for menor que 1, MethodArgumentNotValidException
uma exceção será lançada.
Além das @Min
anotações , existem muitas outras anotações que podem ser usadas para validar os parâmetros da solicitação. Por exemplo, @Max
as anotações são usadas para verificar o valor máximo de um parâmetro, @NotBlank
as anotações são usadas para verificar se uma string não está vazia, @Email
as anotações são usadas para verificar o formato de um endereço de e-mail, etc.
mensagem de erro personalizada
Por padrão, MethodArgumentNotValidException
uma exceção . No entanto, você pode usar message
o atributo para especificar uma mensagem de erro personalizada.
Por exemplo, o código a seguir usa uma mensagem de erro personalizada para validar o valor mínimo id
do parâmetro :
@GetMapping("/users/{id}")
public User getUser(@PathVariable @Min(value = 1, message = "id 必须大于等于 1") Long id) {
// 处理获取用户逻辑
}
No código acima, usamos message
o atributo para especificar uma mensagem de erro personalizada. Se id
o argumento for menor que 1, MethodArgumentNotValidException
uma exceção será lançada com uma mensagem de erro personalizada.
Cheque combinado
Às vezes, pode ser necessário executar validação combinada em vários parâmetros de solicitação. Por exemplo, talvez seja necessário verificar se start
o parâmetro é menor que end
o parâmetro. Nesse caso, você pode usar @Valid
anotações e objetos personalizados para implementar a validação combinada.
Aqui está um exemplo de código que usa um objeto personalizado DateRange
para combinar a soma de verificação start
e end
os parâmetros :
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) {
// 处理获取用户列表逻辑
}
No código acima, usamos @Valid
anotações para validar DateRange
o objeto. DateRange
O objeto start
contém end
propriedades e, que @NotNull
são @DateTimeFormat
validadas usando as anotações e, respectivamente. Se for start
maior que end
, MethodArgumentNotValidException
uma exceção .
Resumir
Neste artigo, apresentamos como usar @RequestParam
anotações para obter parâmetros de solicitação e usar javax.validation.constraints
anotações no pacote para verificar os parâmetros de solicitação. Também mostramos como aumentar a flexibilidade da validação de dados usando mensagens de erro personalizadas e validações combinadas. Por meio desses códigos de exemplo, você pode entender melhor como usar @RequestParam
para .
Aqui está o código de exemplo completo:
@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) {
// 处理获取用户列表逻辑
}
}
Espero que este artigo seja útil para você, obrigado pela leitura!