实习笔记之Spring Validation

Validation概念及作用

一、简介

数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已。可以使用本文将要介绍的validation来对数据进行校验。

二、常用注解

注解作用
@Null限制只能为null
@NotNull限制必须不为null
@NotEmpty只作用于字符串类型,字符串不为空,并且长度不为0
@NotBlank只作用于字符串类型,字符串不为空,并且trim()后不为空串
@AssertFalse限制必须为false
@AssertTrue限制必须为true
@DecimalMax(value)限制必须为一个不大于指定值的数字
@DecimalMin(value)限制必须为一个不小于指定值的数字
@Digits(integer,fraction)限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future限制必须是一个将来的日期
@Past 验证注解的元素值(日期类型)比当前时间早
@Max(value)限制必须为一个不大于指定值的数字
@Min(value)限制必须为一个不小于指定值的数字
@Pattern(value)限制必须符合指定的正则表达式
@Size(max,min)限制字符长度必须在min到max之间
@Email验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

三、使用场景

1、在接口字段参数上直接使用

在方法字段参数上直接用对应的注解即可

@RestController
@RequestMapping("/tracemain")
public class TraceMainController {
 
    @PostMapping("/save")
    public ResponseEntity<TraceMainSaveOutVo> saveTraceMain(
        @NotNull(message = "type字段不能为空") Integer type) {
        // xxxx
        return ResponseEntity.success(traceMainSaveOutVo);
    }
 
}

2、在对象上使用

Controller方法中对象前面添加 @Validated 注解,VO对象里面字段上面添加对应注解即可
如下代码

@RestController
@RequestMapping("/tracemain")
public class TraceMainController {
 
    @PostMapping("/save")
    public ResponseEntity<TraceMainSaveOutVo> saveTraceMain(@RequestBody @Validated TraceMainSaveInVo traceMainSaveInVo) {
        // xxxx
        return ResponseEntity.success(traceMainSaveOutVo);
    }
 
}
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TraceMainSaveInVo extends SysModel {
 
    private static final long serialVersionUID = -1826896482893289340L;
 
    @ApiModelProperty("物流唯一单号")
    @NotBlank(message = "物流唯一单号不能为空")
    private String logisticsUniqueNo;
 
    @ApiModelProperty("HQ跟踪单号,格式为:HQ1+19位数字")
    @Pattern(regexp = "^HQ1+\\d{19}", message = "HQ跟踪单号格式有误,格式为:HQ1+19位数字")
    @Size(min = 22, max = 22, message = "HQ跟踪单号格式有误, 格式为:HQ1+19位数字")
    private String hqTraceNo;
 
 
    @ApiModelProperty("预报来源: 1-WMS,2-LMS, 3-1track")
    @NotNull(message = "预报来源不能为空")
    @Min(value = 1, message = "预报来源的值只能为1,2,3")
    @Max(value = 3, message = "预报来源的值只能为1,2,3")
    private Integer predictSource;
 
}

3、在嵌套对象使用

Controller类上添加 @Validated 注解,方法参数上添加 @Valid 注解,VO对象里面字段上面添加对应注解即可 ;
代码如下:

@RestController
@RequestMapping("/xxx")
@Validated
public class PredictController {
 
    @PostMapping("/save")
    public ResponseEntity<List<PredictOutVo>> saveOrUpdatePredict(@RequestBody @Valid List<PredictInVo> predictInVoList) {
        // xxx
        return ResponseEntity.success(predictOutVoList);
    }
 
}
 
public class PredictInVo extends SysModel {
 
    @NotBlank(message = "OMS订单编号oms_order_no不能为空")
    private String omsOrderNo;
 
}
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值