【传参校验注解】


前端传参做校验,javax.validation.constraints为我们提供了很多注解来帮忙我们做参数校验。

一、javax.validation.constraints包的注解

导包

pom.xml中引入下面的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

使用

@Null / @NotNull

@NotNull(message = "最大数,不能为空")
校验参数⼀定不能为null,但是可以为" "。
@Null(message = "必须为空")
标注的属性值必须为空

@NotEmpty

@NotEmpty(message = "地址不能为NULL")

校验集合类参数(如String类、Collection、Map、数据Array)不能为null或empty。其中String的length、Collection和Map的size不能为0。

@NotBlank

@NotBlank(message = "ID,不能为空") 

校验String字符串不能为null,且去除两端空⽩字符后的长度⼤于 0,即调⽤trim()之后字符串的长度⼤于0。
@NotEmpty除了@NotNull之外还需要保证@Size(min=1),这也是⼀个注解,这⾥规定最⼩长度等于1,也就是类似于集合⾮空。

@Size

@Size(max = 10, min = 5, message = "修饰的字段长度要在5-10之间")
private String size;

@Positive / @Negative

@Negative(message = "负数")
@Positive(message = "整数")

@PositiveOrZero / @NegativeOrZero

@PositiveOrZero(message = "0或者正数")
@NegativeOrZero(message ="0或者负数")

校验参数必须是正整数或0。

@Pattern

参数验证------正则验证

@Pattern(regexp = "正则表达式",message = "不满⾜正则表达式
@Pattern(regexp = "^.{1,10}$", message = "名称,至多10位字符")
@Pattern(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "不满足邮箱正则表达式")

@Digits

被注释的元素必须是⼀个数字,验证数字的整数位和小数位的位数是否超过指定的长度

@Digits(integer = 7, fraction = 2, message = "最大库存,允许8位整数,2位小数")

@Max / @Min

被注释的元素必须是⼀个数字,其值必须⼤于/小于等于指定的最⼩值

@Max(value = 20, message = "最大长度为20")
@Min(value = 1, message = "最小长度为1")

@DecimalMax / @DecimalMin

被注释的元素必须是⼀个数字(小数值),其值必须⼤于/小于等于指定的最⼩值

@DecimalMax(value = "12.35")
// @DecimalMin(value = "1.24")
private double money;

@AssertFalse / @AssertTrue

被注解的元素类型为boolean且必须为false / true,验证才能通过

@AssertTrue(message = "必须为true")
@AssertFalse(message = "必须为false")
private boolean status;

@Range

被注释的元素必须在合适的范围内,用于指定数字,注意是数字的范围,有两个值,min以及max

@Range(min = 1, max = 888, message = "范围为1至888") // 限定范围
private Long range;

@Email

// 邮箱验证

@Email(message = "邮箱格式错误")
private String email;

@Past / @Future

@Past 被注释的元素必须是⼀个过去的⽇期
@Future 被注释的元素必须是⼀个将来的⽇期

@Future(message = "时间在当前时间之后才可以通过")
@Future(message = "需要一个将来日期") // 只能是将来的日期
// @Past //只能去过去的日期
@DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式化转换
@NotNull // 不能为空
private Date date;

@PastOrPresent / @FutureOrPresent

@PastOrPresent(message = "过去或者现在的时间")
@FutureOrPresent(message = "将来或者现在的时间")

Controller层

1). 开启校验功能@Valid,校验错误后有默认的响应(框架配置⽂件中设置)
2). 给校验的bean后紧跟⼀个BindingResult,就可以获取到校验的结果。
3). 按需封装⾃⼰的返回数

@PostMapping("/deal")
    @ApiOperation("处理")
    public R deal (@RequestBody @Validated InfoDTO infoDTO, BindingResult results)throws Exception{
        if (results.hasErrors()) {
			//获取并返回自定义错误提⽰语      
return R.error(-1, results.getFieldError().getDefaultMessage());
        }
        try {
        	// 业务层
			R r=Service.deal(infoDTO);
        	return r;
		} catch (Exception e) {
			return R.error(-1, "失败,请刷新页面重试!");
		}
}

二、@JsonFormat、@JSONField、@DateTimeFormat

1、@DateTimeFormat:

因为其用法比较单一,只用于将字符串格式化成日期,在加入spring以后,直接使用注解@DateTimeFormat(pattern=”yyyy-MM-dd”)即可。@DateTimeFormat 注解有3个可选的属性:style,pattern和iso。

属性style: 允许我们使用两个字符的字符串来表明怎样格式化日期和时间。第一个字符表明了 日期的格式,第二个字符表明了时间的格式。下面的表格中列出了可用的选择以及相应的输出的例子:
描述 字符串值 示例输出

Tables	                Are	  Cool
短格式(这是缺省值)	    SS	  8/30/64 11:24 AM
中等格式	MM		        Aug   30, 1964 11:24:41 AM
长格式	                LL	  August 30, 1964 11:24:41 AM CDT
完整格式	                FF	  Sunday, August 30,1964 11:24:41 AM CDT
使用短横线省略日期或时间	M-	  Aug 30, 1964

Pattern: 属性允许我们使用自定义的日期/时间格式。该属性的值遵循java标准的date/time格式规范。缺省的该属性的值为空,也就是不进行特殊的格式化。通常情况下我们都是使用这个 注解做自定义格式化的。
iso: 基本上用不上,这里不做讲解

2、@JsonFormat

用法 为在属性值上 @JsonFormat(pattern= “yyyy-MM-dd”,timezone=”GMT+8”),如果直接使用 @JsonFormat(pattern=”yyyy-MM-dd”)就会出现2018-08-01 08:00:00的情况, 会相差8个小时,因为我们是东八区(北京时间)。所以我们在格式化的时候要指定时区(timezone )

@JsonFormat(pattern = “yyyy-MM-dd’T’HH:mm:ss.SSSZ”, locale = “zh”, timezone = “GMT+8”)

  1. pattern 指定转化的格式SSSZ(S指的是微秒,Z指时区),此处的pattern和java.text.SimpleDateFormat中的Time Patterns一致
  2. locale主要指语言,如果中文的话,月份输出是五月,但是英文就是May,尤其是在反序列化的时候特别重要
  3. timezone主要解决“8小时”问题

3、@JSONField

用法:目前最长的用属性是@JSONField(name=”resType”)和 @JSONField(format=”yyyy-MM-dd”)
name:@JSONField(name=”resType”)主要用于指定前端传到后台时对应的key值,如果bean中没有这个注解,则默认前端传过来的key是field本身,即如果是private String name,name前端对应的key就是name才能对应上。
format @JSONField(format=”yyyy-MM-dd”)主要用于格式化日期,比如前台传过来的时间是2018-07-12 17:44:08,但是通过这个注解,你存到数据库的时间就是2018-07-12 00:00:00.

区别
1)后端返回前端时使用,主要用于后台传值到前台
一、出参格式化:@JSONField是阿里巴巴下fastjson下的,@JsonFormat是jackson下面的。

  1. @JsonFormat(pattern = “yyyy-MM-dd”,timezone = “GMT+8”)
    注意:需要加时区,不然相差8小时
  2. @JSONField(format = “yyyy-MM-dd”)
    2)前台传后台时使用,主要用于后台接受前台的值
    二、入参格式化:可以使用 Spring 的 @DateTimeFormat 注解格式化参数,将字符串格式化成日期,来解决上述问题。
    @DateTimeFormat(pattern=“yyyy-MM-dd”)
    例子:
    @JsonFormat(locale=“zh”, timezone=“GMT+8”, pattern=“yyyy-MM-dd HH:mm:ss”)
    @DateTimeFormat
    @ApiModelProperty(value = “有效结束日期”)
    private Date enddate;
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑回归是一种二分类算法,可以用于鉴别红酒的种类。在这里,我们可以使用Sofmax回归算法来预测红酒的产地,并输出uracy,画出ROC曲线。\n\首先,我们需要导入红酒数据。可以使用Siki-r库中的_wi()函数来导入数据,代码如下:\n\```pyth\from sklear.datasets impor _wi\n\rwi = _wi()\x = rwi.\y = rwi.targ\```\n\接下来,我们需要将数据集分为训练集和测试集。可以使用rai_tes_spli()函数来实现,代码如下:\n\```pyth\from sklear.m_selecti impor trai_tes_spli\n\x_trai, x_tes, y_trai, y_tes = trai_tes_spli(x, y, tes_siz=.3, random_s=)\```\n\然后,我们可以使用逻辑回归模型来训练数据集,并进行预测。在这里,我们使用Sofmax回归算法来进行多分类预测,代码如下:\n\```pyth\from sklear.linear_m impor LogistiRegressi\n\r = LogistiRegressi(multi_class='muimi', solver='bfgs')\r.fi(x_trai, y_trai)\y_pr = lr.predi(x_tes)\```\n\最后,我们可以输出模型的准确率和ROC曲线。代码如下:\n\```pyth\from sklear.metrics impor accuracy_scor, r_curv, au\impor matplotlib.pyp as p\n\uracy = accuracy_scor(y_tes, y_pr)\pri(\Accuracy\", accuracy)\n\fpr = di()\pr = di()\r_au = di()\for i i rang(3):\ fpr[i], pr[i], _ = r_curv(y_tes, y_pr, pos_lab=i)\ r_au[i] = au(fpr[i],pr[i])\n\p.figur()\p.p(fpr[], pr[], color='r', lw=2, lab='ROC curv (r = %.2f)' % r_au[])\p.p([, 1], [, 1], color='vy', lw=2, linesty='--')\p.xlim([., 1.])\p.ylim([., 1.05])\p.xlab('Fals Positiv R')\p.ylab('Tru Positiv R')\p.ti('Receiver operating characteristi examp')\p.leg(=\wer righ\")\p.show()\```\n\

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值