Spring Boot 如何使用 @RequestParam 进行数据校验

Spring Boot 如何使用 @RequestParam 进行数据校验

在 Web 应用程序中,用户提交的数据通常以请求参数的形式传递。在 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 来组合校验 startend 参数:

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 对象包含 startend 属性,它们分别使用 @NotNull@DateTimeFormat 注解进行校验。如果 start 大于 end,则会抛出 MethodArgumentNotValidException 异常。

总结

在本文中,我们介绍了如何使用 @RequestParam 注解来获取请求参数,并使用 javax.validation.constraints 包中的注解来对请求参数进行校验。我们还展示了如何使用自定义错误消息和组合校验来提高数据校验的灵活性。通过这些示例代码,您可以更好地理解如何在 Spring Boot 应用程序中使用 @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) {
        // 处理获取用户列表逻辑
    }
}

希望这篇文章对您有所帮助,谢谢阅读!

猜你喜欢

转载自blog.csdn.net/2302_77835532/article/details/131341713
今日推荐