@Valid使用技巧 & 踩坑记录

12 篇文章 0 订阅

一 背景

在开发过程中,对于一些参数的校验,参数非空,参数长度限制,参数范围限制,嵌套结构参数校验等情况,用@Valid注解会省去很多手写的参数校验,简单又高效。

二  使用样例和姿势

1  校验的请求类

import io.swagger.annotations.ApiModelProperty;
import java.util.List;
import javax.validation.Valid;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;

@Data
@NoArgsConstructor
public class PersonInformationReq {

    @ApiModelProperty(value = "名称")
    @NotBlank(message = "名称不能为空") // 指定【String】类型参数不能为空
    @Length(min = 5, max = 10) // 指定【String】类型参数长度需要在【5, 10】范围内
    private String name;

    @ApiModelProperty(value = "年龄")
    @NotNull(message = "年龄不能为空") // 指定【Integer】类型参数不能为空
    @Max(100)
    @Min(0) // 指定【Integer】类型参数需要在【0, 100】范围内
    private Integer old;

    @ApiModelProperty(value = "爱好 eg:['打篮球', '滑雪']")
    @NotNull // 指定【List<T>】类型参数不能为空
    @Size(min = 2, max = 5) // 指定【List<T>】类型的容量需要在【2, 5】范围内
    private List<String> hobbies;

    @ApiModelProperty(value = "联系人信息")
    @Valid // 嵌套参数校验必须加这个注解!!!
    private ContactReq contact;
}
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;

@Data
@NoArgsConstructor
public class ContactReq {
    @ApiModelProperty(value = "联系人ID")
    @NotNull // 指定【Long】类型参数不能为空
    private Long contactId;

    @ApiModelProperty(value = "工作电话")
    @NotBlank // 指定【String】类型参数不能为空
    private String workPhone;

    @ApiModelProperty(value = "工作邮箱")
    @NotBlank
    private String workEmail;

    @ApiModelProperty(value = "个人邮箱")
    @NotBlank
    private String personalEmail;
}

2  引用请求类

package com.bytedance.cg.robot.web.controller;

import com.bytedance.cg.robot.base.conf.TccConf;
import com.bytedance.cg.robot.base.req.LarkRobotReq;
import com.bytedance.cg.robot.web.biz.LarkRobotBiz;
import com.bytedance.cg.robot.web.req.PersonInformationReq;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.annotation.Resource;
import javax.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class TestController {

    @ApiOperation(value = "测试controller")
    @PostMapping("/test")
    public String Test(@RequestBody @Valid PersonInformationReq req) {
        return "";
    }

}

三  注意事项

如果提示javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint...  并且你用到了@NotBlank

注意引的包需要是hibernate包下的NotBlank

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值