时间:2021-05-20
我们在开发Java项目的时候,经常需要对参数进行一些必填项、格式、长度等进行校验,如果手写代码对参数校验,每个接口会需要很多低级的代码,这样会降低代码的可读性。那么我们能不能使用一种比较优雅的方式来实现,对请求中的参数进行校验呢?
knife4j的安装与使用可参考我的博客:SpringBoot使用knife4j进行在线接口调试
正文
ValidationApi框架就是用来解决参数校验中代码冗余问题,ValidationApi框架提供一些注解用来帮助我们对请求参数进行校验:
SpringBoot使用validation-api实现参数校验
注入依赖
<!--参数校验--><dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version></dependency><!--提供一些字符串操作--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version></dependency><!--lombok--><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <optional>true</optional></dependency><!--knife4j接口--><dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.4</version></dependency>UserPojoReq.java请求封装类
如果成员变量是其他对象实体,该变量必须加 @Valid,否则嵌套中的验证不生效
@Setter@Getter@ToString@ApiModel("用户对象")public class UserPojoReq extends Request implements Serializable { private static final long serialVersionUID = -354657839724457905L; @ApiModelProperty(required = true, notes = "主键", example = "123") private String id; @ApiModelProperty(required = true, notes = "用户名", example = "luo") @NotNull(message = "用户姓名为必填项,不得为空") @Size(min = 2,max = 20,message = "用户名长度要在2—8个字符") private String name; @ApiModelProperty(required = true, notes = "消息", example = "消息") private String msg;}CouponTypeEnum.class :错误码枚举类
@Getterpublic enum CouponTypeEnum { PARAMETER_ERROR(1001, "请求参数有误!"), UNKNOWN_ERROR(9999, "未知的错误!”); /** * 状态值 */ private int couponType; /** * 状态描述 */ private String couponTypeDesc; CouponTypeEnum(int couponType, String couponTypeDesc){ this.couponType = couponType; this.couponTypeDesc = couponTypeDesc; } public static String getDescByType(int couponType) { for (CouponTypeEnum type : CouponTypeEnum.values()) { if (type.couponType == couponType) { return type.couponTypeDesc; } } return null; } public String getcouponTypeStr(){ return String.valueOf(this.couponType); }}BusinessException.java:自定义业务异常类
/** * 业务自定义异常 */@Getterpublic class BusinessException extends RuntimeException { private static final long serialVersionUID = -1895174013651345407L; private final CouponTypeEnum errorCode; private String primaryErrorCode; private String primaryErrorMsg; private String primaryErrorIP; public BusinessException(CouponTypeEnum errorCode) { this(errorCode, errorCode.getCouponTypeDesc()); } public BusinessException(CouponTypeEnum errorCode, String message) { super(message); this.errorCode = errorCode; } public BusinessException(CouponTypeEnum errorCode, String message,String primaryErrorCode,String primaryErrorMsg,String primaryErrorIP) { super(message); this.errorCode = errorCode; this.primaryErrorCode=primaryErrorCode; this.primaryErrorMsg=primaryErrorMsg; this.primaryErrorIP=primaryErrorIP; } public BusinessException(CouponTypeEnum errorCode,String primaryErrorCode,String primaryErrorMsg,String primaryErrorIP) { this(errorCode, errorCode.getCouponTypeDesc()); this.primaryErrorCode=primaryErrorCode; this.primaryErrorMsg=primaryErrorMsg; this.primaryErrorIP=primaryErrorIP; }}GlobalExceptionHandler.class 拦截异常并统一处理
验证
测试接口
@Valid被标记的实体将会开启一个校验的功能
@RequestBody:请求实体需要加上@RequestBody否则MethodArgumentNotValidException异常将会被识别成Exception异常,提示信息将与预期不符。
@RestController@Slf4jpublic class UserController { @PostMapping("/helloluo") @MyPermissionTag(value = "true") public String helloluo(@RequestBody @Valid UserPojoReq userPojoReq){ return "Hello World”+userPojoReq; }}模拟请求参数,进行接口访问:
到此这篇关于SpringBoot使用validation-api实现参数校验的示例的文章就介绍到这了,更多相关SpringBoot validation参数校验内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言之前写了一个博客是关于使用SpringBoot使用validation-api实现参数校验,当时使用的注解都是validation-api自带的注解只能完成
一、参数校验springboot使用校验框架validation校验方法的入参SpringBoot的Web组件内部集成了hibernate-validator,
介绍JSR-380是J2EE的一个规范,用于校验实体属性,它是JSR-303的升级版,在SpringBoot中可以基于它优雅实现参数校验。示例在没有使用JSR-
公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑。原留言如下:有坑,你试试^A-\\d{12}-\\d{4}$
前言接触springboot一年多,是时候摆脱这种校验方式了233,每个参数都if判断,一眼看过去就是很low的程序员。Validation有了这个插件就再也不