关于lombok和@Validated的使用

lombok介绍

Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,Lombok提供了一组有用的注释,用来消除Java类中的大量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产生干净,简洁且易于维护的Java类。
官网地址:https://projectlombok.org/features/all

lombok的实际使用

lombok可以用几个注解,替换掉很多例如getter和setter方法,让代码看起来整洁,在编译时会插入.class文件,以下是经常使用到的注解:

  1. @Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Permission {
  1. @Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法

  2. @Slf4j //lombok的日志,可直接log.info调用日志

@Slf4j //lombok的日志
@Service
public class UserServiceImpl implements UserService {
log.info("操作完成");
  1. @Builder 可以给实体类更简洁的赋值方式
//lombok的赋值用法
        //builder是一种建造者模式
        Permission build = Permission.builder()
                .name("aaa")
                .url("bbb").build();
        permissionMapper.insertSelective(build);

@AllArgsConstructor:作用于类上,用于生成构造函数。
@NoArgsConstructor:无参的构造方法;
@AllArgsConstructor:全参的构造方法;
@RequiredArgsConstructor:生成包含final和@NonNull注解的成员变量的构造器。

引入lombok和Validated的依赖

springboot中的依赖:

		<!--validated的依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--lombok辅助类 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

如果在普通的java开发中,对于Validated,可能你需要依赖:

<dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.9.Final</version>
   </dependency>
   <dependency>
             <groupId>javax.el</groupId>
             <artifactId>javax.el-api</artifactId>
             <version>3.0.0</version>
     </dependency>
     <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>javax.el</artifactId>
            <version>2.2.6</version>
     </dependency>
idea配置lombok的插件

导入lombok的包之后,需要在编辑器加载lombok插件,不然在写程序的过程中无法调用get、set方法。打开idea,File–>Settings–>Plugins–>Browse repositories,搜索lombok,然后install,安装完之后需要重启,此处自行百度。

@Validated

在程序中,前端会在页面上用各种规则限制传送到后台的字段,但是当绕过页面调用后台接口时,后台数据也需要校验,但是当传参时每个参数去判断是很繁琐的,此时可以使用@Validated注解来帮你完成校验:

	JSR提供的校验注解:

    @Null   被注释的元素必须为 null
    @NotNull    被注释的元素必须不为 null
    @AssertTrue     被注释的元素必须为 true
    @AssertFalse    被注释的元素必须为 false
    @Min(value)    被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @Max(value)    被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
    @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值
    @Size(max=, min=)  被注释的元素的大小必须在指定的范围内
    @Digits (integer, fraction)    被注释的元素必须是一个数字,其值必须在可接受的范围内
    @Past  被注释的元素必须是一个过去的日期
    @Future     被注释的元素必须是一个将来的日期
    @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

    正则表达式的说明:
    - ^string : 匹配以 string 开头的字符串
    - string$ :匹配以 string 结尾的字符串
    - ^string$ :精确匹配 string 字符串
    - ((^Man$|^Woman$|^UGM$)) : 值只能在 Man,Woman,UGM 这三个值中选择

    Hibernate Validator提供的校验注解:

    @NotBlank(message =)  验证字符串非null,且长度必须大于0
    @Email  被注释的元素必须是电子邮箱地址
    @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
    @NotEmpty  被注释的字符串的必须非空
    @Range(min=,max=,message=)  被注释的元素必须在合适的范围内

以下是我测试的实体类:

@Data //提供getter,setter等一系列方法,如果编辑器的idea,需要安装lombok插件支持,不然无法获取getter,setter
@AllArgsConstructor //提供所有参数的构造方法
@NoArgsConstructor//提供没有参数的构造方法
public class User {

    private int id;

    @NotBlank(message = "用户名不能为空")  //NotBlank:非null,且长度必须大于0
    private String username;

    @Size(min = 8) //Size:被注释的元素的大小必须在指定的范围内
    @NotBlank(message = "密码不能为空") //只作用于string
    private String password;

    @Email //符合邮箱的规则
    @NotBlank(message = "邮箱不能为空")
    private String email;

    @Pattern(regexp ="((^man$|^women$))" ,message = "必须是男女其中一个值")
    @NotBlank(message = "性别不能为空")
    private String sex;

    @Past //过去的日期
    private Date lastLoginDate;

    @NotNull //int不能使用notEmpty
    private int errorLoginTime;
    
}

控制器代码

@Controller
@Validated //将Validated放在controller上,这个参数可以告诉 Spring 去校验方法参数。
public class TestController {
    @Autowired
    Validator validator;

    /**
     * 实体类验证
     * */
    @RequestMapping(value = "/addUser",method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity addUser(@RequestBody @Valid User user){

        return ResponseEntity.ok(user);
    }

    /**
     * 单独参数直接验证
     * */
    @RequestMapping(value = "/getEmail",method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity getEmail(@Email @RequestParam(value = "email") String a,@NotNull String username){

        return ResponseEntity.ok(a);
    }

    /**
     * 在方法中进行实体类验证
     * */
    @RequestMapping(value = "/validated",method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity Validated(@RequestBody User user){
        Set<ConstraintViolation<User>> violationSet= validator.validate(user);
        //如果set.length()不为空,则有参数不符合校验要求
        for (ConstraintViolation<User> users:violationSet
             ) {
            System.out.println(users.getMessage());
        }
        return ResponseEntity.ok(user);
    }
}
  1. 在类名上加上@Validated,这个参数可以告诉 Spring 去校验方法参数。
  2. 在@RequestBody参数前写上 @Valid,可以校验实体类型的参数
  3. 可以在直接传参的参数前使用@Email,@NotNull等
  4. 如果在方法中,需要自己手动校验参数,可以使用validator,在spring Component类中可以AutoWired,别的可以使用工厂获得
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
测试接口:

在这里插入图片描述
收工。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值