SpringBoot参数怎么校验

发布时间:2022-05-13 15:54:29 作者:iii
来源:亿速云 阅读:137

SpringBoot参数怎么校验

在Spring Boot应用中,参数校验是一个非常重要的环节,它能够确保传入的数据符合预期的格式和规则,从而避免潜在的错误和安全问题。Spring Boot提供了多种方式来进行参数校验,本文将介绍如何使用这些方法来实现参数校验。

1. 使用@Valid注解

Spring Boot支持使用@Valid注解来触发参数校验。通常,我们会在Controller层的方法参数上使用@Valid注解,并结合@RequestBody@ModelAttribute来校验请求体或表单数据。

示例代码

import javax.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @PostMapping("/users")
    public String createUser(@Valid @RequestBody User user) {
        // 处理用户创建逻辑
        return "User created successfully!";
    }
}

在上面的代码中,@Valid注解会触发对User对象的校验。如果校验失败,Spring Boot会自动返回一个400 Bad Request响应,并包含详细的错误信息。

2. 使用@NotNull@Size等注解

在实体类中,我们可以使用JSR-303/JSR-380提供的注解来定义校验规则。常用的注解包括:

示例代码

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class User {

    @NotNull(message = "用户名不能为空")
    private String username;

    @Size(min = 6, max = 20, message = "密码长度必须在6到20之间")
    private String password;

    // getters and setters
}

在上面的代码中,User类的username字段不能为null,password字段的长度必须在6到20之间。如果校验失败,Spring Boot会返回相应的错误信息。

3. 自定义校验注解

除了使用内置的校验注解,我们还可以自定义校验注解来满足特定的业务需求。自定义校验注解通常包括以下几个步骤:

  1. 定义注解。
  2. 实现校验逻辑。
  3. 在实体类中使用自定义注解。

示例代码

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PhoneNumberValidator.class)
public @interface PhoneNumber {
    String message() default "Invalid phone number";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {

    @Override
    public boolean isValid(String phoneNumber, ConstraintValidatorContext context) {
        // 自定义校验逻辑
        return phoneNumber != null && phoneNumber.matches("^1[3-9]\\d{9}$");
    }
}
public class User {

    @PhoneNumber(message = "手机号格式不正确")
    private String phoneNumber;

    // getters and setters
}

在上面的代码中,我们定义了一个@PhoneNumber注解,并实现了PhoneNumberValidator类来校验手机号格式。如果校验失败,Spring Boot会返回相应的错误信息。

4. 全局异常处理

为了统一处理校验失败的情况,我们可以使用@ControllerAdvice@ExceptionHandler来捕获校验异常,并返回自定义的错误响应。

示例代码

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleValidationExceptions(MethodArgumentNotValidException ex) {
        return ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
    }
}

在上面的代码中,我们捕获了MethodArgumentNotValidException异常,并返回了第一个校验错误的提示信息。

5. 总结

Spring Boot提供了强大的参数校验功能,通过使用@Valid注解、JSR-303/JSR-380注解、自定义校验注解以及全局异常处理,我们可以轻松地实现参数校验,并确保传入的数据符合预期的格式和规则。合理使用这些功能,可以大大提高应用的健壮性和安全性。

推荐阅读:
  1. SpringBoot中参数校验的用法
  2. SpringBoot如何实现参数校验/参数验证

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

springboot

上一篇:Python自动化测试selenium怎么指定截图文件名

下一篇:Python怎么实现8个概率分布公式

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》