吴梦老师的家访:解锁线上教育新篇章,精彩瞬间尽收眼底

核心内容摘要

指尖上的财富奇迹:快乐8今晚开奖信息查询,带你解锁无限可能
噩丕賱丕倬爻賶賰卮:被译码的感官美学,一场通往未来的意识觉醒

探索视听边界:当罗马尼亚电影遇上“欧美人和禽胶配方大全”

目录

maven 依赖

全局异常处理

定义通用返回类

全局异常处理类

Valid / Validated

Valid最常用

ValidatedSpring 提供增强版

常见校验注解

NotNull最基础

NotEmpty比 NotNull 严格一点

NotBlank字符串专用最常用

Length字符串长度Hibernate 扩展

Size通用长度校验

Min / Max数值范围

Positive / PositiveOrZero推荐

Email邮箱校验

Pattern正则校验强力

AssertTrue / AssertFalse

测试

post 接口

get 请求

maven 依赖对于 Spring Boot

x :dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency对于 Spring Boot

xJakarta 包名:依赖不变但代码里引用的包名发生变化javax.validation.* → jakarta.validation.*如果没引入这个依赖Valid 不生效校验注解写了等于没写

全局异常处理全局异常处理用于参数校验失败以及业务异常时将接口错误信息返回

定义通用返回类publicclassApiResultT{privateintcode;privateStringmessage;privateTdata;publicstaticTApiResultTfail(Stringmessage,Tdata){returnnewApiResult(400,message,data);}publicApiResult(){}publicApiResult(intcode,Stringmessage,Tdata){this.codecode;this.messagemessage;this.datadata;}publicintgetCode(){returncode;}publicvoidsetCode(intcode){this.codecode;}publicStringgetMessage(){returnmessage;}publicvoidsetMessage(Stringmessage){this.messagemessage;}publicTgetData(){returndata;}publicvoidsetData(Tdata){this.datadata;}}

全局异常处理类importorg.springframework.web.bind.MethodArgumentNotValidException;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.RestControllerAdvice;importjavax.validation.ConstraintViolationException;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;RestControllerAdvicepublicclassGlobalExceptionHandler{/** RequestBody 校验失败 **/ExceptionHandler(MethodArgumentNotValidException.class)publicApiResultListMapString,StringhandleMethodArgumentNotValid(MethodArgumentNotValidExceptionex){ListMapString,Stringerrorsex.getBindingResult().getFieldErrors().stream().map(e-{MapString,StringmnewHashMap();m.put(field,e.getField());m.put(message,e.getDefaultMessage());returnm;}).collect(Collectors.toList());returnApiResult.fail(参数校验失败,errors);}/** RequestParam / PathVariable 校验失败 **/ExceptionHandler(ConstraintViolationException.class)publicApiResultListMapString,StringhandleConstraintViolation(ConstraintViolationExceptionex){ListMapString,Stringerrorsex.getConstraintViolations().stream().map(v-{MapString,StringmnewHashMap();// propertyPath 形如get.id / method.arg0m.put(field,v.getPropertyPath().toString());m.put(message,v.getMessage());returnm;}).collect(Collectors.toList());returnApiResult.fail(参数校验失败,errors);}}

Valid / Validated

Valid最常用importjakarta.validation.Valid;作用触发校验本身不定义规则常见位置Controller 方法参数、成员变量级联校验示例PostMapping(/add)publicvoidadd(RequestBodyValidUserDTOdto){}没有 ValidUserDTO 里的所有校验注解都不会执行

ValidatedSpring 提供增强版importorg.springframework.validation.annotation.Validated;特点支持分组校验可用在 类、方法上示例ValidatedRestControllerpublicclassUserController{}90% 场景用 Valid 即可

常见校验注解

NotNull最基础含义不能为 null可以是空字符串 “”适用类型所有对象类型Integer、Long、String、List…NotNull(message用户ID不能为空)privateLonguserId;

NotEmpty比 NotNull 严格一点含义不能为 null不能为 “”集合不能是空集合适用类型StringCollection / Map / ArrayNotEmptyprivateStringname;NotEmptyprivateListStringroles;

NotBlank字符串专用最常用含义不能为 null不能为 “”不能是 空白适用类型适用于 StringNotBlank(message用户名不能为空)privateStringusername;

Length字符串长度Hibernate 扩展适用类型只能用于 Stringimportorg.hibernate.validator.constraints.Length;Length(min6,max20,message长度必须在

位之间)privateStringpassword;

Size通用长度校验Size(min1,max

privateListLongids;适用类型StringCollectionMapArray与 Length 区别注解 适用范围Length : StringHibernateSize : String 集合标准

Min / Max数值范围Min(

Max(

privateIntegerage;⚠️ 不能校验字符串

Positive / PositiveOrZero推荐Positive// 0PositiveOrZero// 0PositiveprivateLongamount;

Email邮箱校验Email(message邮箱格式不正确)privateStringemail;

Pattern正则校验强力Pattern(regexp^1[

]\\d{9}$,message手机号格式错误)privateStringphone;

AssertTrue / AssertFalseAssertTrueprivateBooleanagree;

测试importorg.hibernate.validator.constraints.Length;importjavax.validation.Valid;importjavax.validation.constraints.Email;importjavax.validation.constraints.Min;importjavax.validation.constraints.NotBlank;importjavax.validation.constraints.NotEmpty;importjavax.validation.constraints.NotNull;importjavax.validation.constraints.Positive;importjava.util.List;publicclassStudent{NotBlank(message用户名不能为空)privateStringname;NotBlank(messagestuendId不能为空)Length(min6,max20,messagestuendId长度必须在

位之间)privateStringstuendId;NotNull(messageteacherName不能为null)privateStringteacherName;Min(value18,message年龄必须大于18岁)privateIntegerage;Email(message邮箱格式不正确)privateStringemail;Positive(messageamount要大于

privateLongamount;NotEmpty(messageroles不能为空)privateListStringroles;/** 级联校验如果要校验这个列表里的 Address 对象必须加 Valid **/NotNull(message地址列表不能为空)ValidprivateListSendMessageModeladdresses;//省略get、set 方法}importorg.hibernate.validator.constraints.Length;importjavax.validation.constraints.NotBlank;publicclassSendMessageModel{NotBlank(messagemobile不能为空)Stringmobile;Length(min6,max20,messagesign长度必须在

位之间)Stringsign;NotBlank(messagecontent不能为空)Stringcontent;//省略get、set 方法}

post 接口importcom.xiaohaitang.somedemo.exception.Student;importorg.springframework.web.bind.annotation.*;importjavax.validation.Valid;RestControllerRequestMapping(value/apiList)publicclassUsercontroller{PostMapping(value/v1/addStudents)publicStringvalidChechaAddStudents(RequestBodyValidStudentstudent){returnsuccess;}}入参{age:0,email:string,amount:0,addresses:[{}]}响应{code:400,message:参数校验失败,data:[{field:teacherName,message:teacherName不能为null},{field:email,message:邮箱格式不正确},{field:addresses[0].mobile,message:mobile不能为空},{field:amount,message:amount要大于0},{field:age,message:年龄必须大于18岁},{field:name,message:用户名不能为空},{field:addresses[0].content,message:content不能为空},{field:stuendId,message:stuendId不能为空},{field:roles,message:roles不能为空}]}

get 请求必须在类上增加Validated参数里的校验才会生效importorg.hibernate.validator.constraints.Length;importorg.springframework.validation.annotation.Validated;importorg.springframework.web.bind.annotation.*;importjavax.validation.constraints.NotBlank;importjavax.validation.constraints.NotNull;importjavax.validation.constraints.Positive;Validated// 必须启用方法参数校验RestControllerRequestMapping(value/apiList)publicclassUsercontroller{GetMapping(/test)publicStringtest(RequestParamNotBlank(messagename 不能为空)Length(min6,max20,messagename长度必须在

位之间)Stringname,RequestParamNotNull(messageid 不能为空)Positive(messageid 必须大于

Longid){returnsuccess;}}入参http://localhost:8080/apiList/test?id0nameaaa响应{code:400,message:参数校验失败,data:[{field:test.id,message:id 必须大于 0},{field:test.name,message:name长度必须在

位之间}]}

明明说好只蹭蹭的漫画笔趣阁-明明说好只蹭蹭的漫画笔趣阁应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123