㈠ SpringMVC的参数校验以及@Valid相关注解的使用和自定义
SpringMVC的基本参数校验涉及使用`@RequestParam`注解来控制请求参数。在编写控制层接口时,对前端或接口访问者的参数进行校验,可以避免代码重复,减少资源浪费和提升代码的美观度。通过使用`@RequestParam`,当访问接口时没有传递该参数,SpringMVC会抛出异常,此时可以使用全局错误处理机制进行统一捕获和处理。例如,可以声明参数类型为引用类型,如`Long`,这样该参数就不是必须的。
`@RequestParam`注解具有几个可用属性,包括`name`(指定参数名称,默认为接口定义时的参数名,但可通过该属性覆盖重命名),`required`(默认为`true`,表示参数为必传,若为`false`则该参数可选),`defaultValue`(当参数未传递时提供默认值)。
在SpringMVC中,可借助jsR-303验证框架实现参数的校验。Spring Boot默认使用Hibernate validator进行验证,只需在方法参数上使用`@Valid`注解,Spring Boot将自动对参数对象进行校验,并将校验结果存储在`BindingResult`对象中。
JSR-303定义了一系列注解用于验证Bean属性,如`@Null`、`@NotNull`、`@NotBlank`、`@NotEmpty`、`@Size`(支持字符串、集合)以及数值校验注解如`@Min`、`@Max`、`@Digits`和`@Range`。对于字符串类型,使用`@Email`验证是否为邮件格式,`@Pattern`则用于验证字符串是否符合正则表达式规则。
在实现验证时,需要在类字段上标注对应的控制注解,然后在请求参数处标注`@Valid`声明参数需要校验。框架将把校验结果放在`BindingResult`对象中,该对象包含了所有验证结果。通过`hasErrors`方法判断验证是否通过,`getAllErrors`方法获取所有错误信息,通常返回`FieldError`列表。若未声明`BindingResult`参数,SpringMVC将抛出异常,此时可以采用全局异常处理。
对于接口参数内部引用其他对象的校验,只需在引用字段上添加`@Valid`注解,框架将自动对内部对象执行校验。若需要根据不同接口定制校验规则,可以使用`@Validate`注解来分组校验,通过新建接口用于分组并配置所属的组。例如,在实体类中创建接口用于分组,每个校验注解配置所属的组,接口定义处使用`@Validate`注解并指定需要的接口分组。
另外,实现自定义校验注解,如校验货物库存是否低于最小值。自定义注解格式与普通注解相似,指定验证规则,如库存不能低于`{min}`个。通过实现`@Constraint`注解来说明需要哪个类来验证注解,定义`message`属性用于创建错误信息,`groups`属性指定验证规则分组,`payload`属性定义验证的有效负载。最后,创建一个验证类来实现注解验证逻辑。
㈡ Spring JSR303验证,为什么在页面上使用 form:error显示不了错误信息
说明你对jsr的自定义类型转化器ConversionService没有了解,你虽然model里面已经添加了jsp中的modelAttribute的模型,但是你modelAttribute中的名字没有对应你的PortalUser类中的名字,应该jsp中modelAttribute=“”portalUser“”,你就可以解决你的问题
备注:在jsp中的modelAttribute必须要modelAttribute="POJO类名小写",原理和springmvc.xml中配置conversionService 的默认bean一样意思
㈢ SpringBoot JSR-303 + AOP 自定义注解校验参数
SpringBoot OAuth2.0集成短信验证码登录机制,提供安全的授权认证方式。
实现这一功能,确保传入的参数合法性至关重要。JSR-303和AOP技术的结合,为参数校验提供了强大支持。
引入AOP机制,通过配置参数为空校验,确保短信接口的参数完整。短信发送过程由AOP切面控制,优化了程序处理逻辑。
启动服务并测试,通过访问指定URL验证短信发送功能,如访问`localhost:7000/api/v1/sms/send?phone=&type=sms_login`。
自定义注解`ValueIn`的创建,对特定字段进行约束,实现更加灵活的校验逻辑。使用`SmsCodeEnum`枚举类定义短信类型,进一步丰富功能。
重新启动服务并进行测试,确保所有功能按预期运行。
源码地址:[江景/moose],欢迎访问查看实现细节。