江苏国龙翔建设公司网站,wordpress头部文字改不了,做网站算新媒体运营吗,建设网站论文范文1.validation参数验证工具
1.1.validation-api技术链
validation-api是一个Java的数据校验规范#xff0c;它定义了一套用于校验Java Bean的API。它是JSR 303规范的一部分#xff0c;也被称为Bean Validation。validation-api提供了一系列的注解#xff0c;用于在Java类的…1.validation参数验证工具
1.1.validation-api技术链
validation-api是一个Java的数据校验规范它定义了一套用于校验Java Bean的API。它是JSR 303规范的一部分也被称为Bean Validation。validation-api提供了一系列的注解用于在Java类的字段、方法参数和方法返回值上添加校验规则。这些注解包括NotNull、Size、Min、Max等等每个注解都有特定的校验规则用于验证数据是否满足特定的条件。
Hibernate Validator是validation-api的唯一实现。除了提供注解和校验规则Hibernate Validator还提供了一系列的工具类和接口用于处理校验结果和错误信息。它可以将校验结果封装为一个Validator对象并提供了各种方法来获取校验结果、错误信息和错误类型。Hibernate Validator还支持国际化可以根据不同的语言环境显示相应的错误信息。它还提供了可自定义的错误消息模板可以根据实际需求来设置错误消息的格式和内容。
spring-boot-starter-validation是一个Spring Boot的starter用于集成和简化Spring框架中的数据校验功能。spring-boot-starter-validation通过自动配置的方式将Hibernate Validator集成到了Spring Boot的应用中从而简化了数据校验的配置过程。通过引入这个starter我们可以在应用中使用标准的注解来进行数据校验而不需要手动配置和引入相关的依赖项。
1.2.validation常用注解
validation-api提供了一些常用的注解
NotNull用于校验字段或方法参数的值不能为空NotEmpty用于校验字符串、集合或数组的值不能为空且长度不能为0NotBlank用于校验字符串的值不能为空或只包含空格Size用于校验字符串、集合或数组的长度是否在指定范围内Min用于校验数字的值是否大于等于指定的最小值Pattern用于校验字符串的值是否匹配指定的正则表达式Email用于校验字符串的值是否符合Email格式DecimalMin 用于校验数字的值是否大于等于指定的最小值可以指定最小值的精度
Hibernate Validator 提供了一些拓展注解用于在 validation-api 注解基础上实现更复杂的数据校验。以下是一些常见的 Hibernate Validator 拓展注解部分
URL用于校验字符串的值是否符合 URL 地址格式CreditCardNumber用于校验信用卡号的格式是否正确Currency用于校验货币代码是否正确ISBN用于校验国际标准书号ISBN是否正确Range用于校验数字的值是否在指定范围内
1.3.代码示例
对于一个请求参数根据需求进行注解申明
import jakarta.validation.constraints.DecimalMax;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Size;
import lombok.Data;Data
public class ReqCreateCatalog {NotEmptyprivate String gameId;DecimalMin(value 1)DecimalMax(value 2)private int type;//目标目录Size(max 50, message 名称长度不能超过{max}个字符)private String catalog;
}
controller方法参数增加Valid注解
PostMapping(value /createCatalog)
public Response create(Valid RequestBody ReqCreateCatalog req) {}
如果请求故意把gameId参数设为空 则程序输出异常日志 2. 全局异常处理器
2.1.使用RestControllerAdvice拦截异常
上面的例子可以看出当验证器抛出MethodArgumentNotValidException异常如果没有一个全局异常捕获器对其进行捕获并进行转义前端得到的响应很奇怪。
SpringMVC使用RestControllerAdvice注解对全局异常进行拦截例如下面的代码
也可以使用ControllerAdvice注解但每个方法还需要添加ResponseBody注解
Slf4j
RestControllerAdvice
public class GlobalExceptionHandler {ExceptionHandler(MethodArgumentNotValidException.class)public ResponseObject handleMethodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest request) {String requestURI request.getRequestURI();log.error(请求地址{},参数校验失败{}, requestURI, e.getMessage());return Response.fail(I18nConstants.COMMON_ILLEGAL_PARAMS);}ExceptionHandler(BusinessRequestException.class)public ResponseObject handleBusinessRequestException(BusinessRequestException e, HttpServletRequest request) {String requestURI request.getRequestURI();log.error(请求地址{},权限码校验失败{}, requestURI, e.getMessage());return Response.fail(e.getErrorCode());}ExceptionHandler(value Exception.class)public ResponseObject handleException(Exception e, HttpServletRequest request) {LoggerUtil.error(, e);return Response.fail(I18nConstants.COMMON_INTERNAL_ERROR);}}
2.2.异常拦截方法有以下几个注意地方
方法名必须以handle开头需要添加ExceptionHandler注解注解的值是一个异常类数组当value为空则默认取方法的异常参数类型当程序触发了一个异常如果在全局异常拦截器找不到映射则会递归找它的父异常则到父类Throwalbe为止如果多个RestControllerAdvice示例绑定了同一个异常程序不会报错但只有一个拦截器起作用。
2.3.使用案例
使用全局异常拦截器重新发起请求可以看到客户端输出
{success: false,message: 1003, //I18nConstants.COMMON_ILLEGAL_PARAMSdata: null
}