当前位置: 首页 > news >正文

大连鼎信网站建设网络推广服务外包

大连鼎信网站建设,网络推广服务外包,淄博做网站电话,wordpress相对路径校验的简单使用: 在Spring中,我们可以使用Valid注解对实体进行校验。在Controller的方法参数中添加Valid注解,然后在实体类的属性上添加校验注解,例如NotNull、Size等。例如: RestController public class UserContr…

校验的简单使用:

在Spring中,我们可以使用@Valid注解对实体进行校验。在Controller的方法参数中添加@Valid注解,然后在实体类的属性上添加校验注解,例如@NotNull、@Size等。例如:

@RestController
public class UserController {@PostMapping("/users")public ResponseEntity<User> createUser(@Valid @RequestBody User user) {userService.createUser(user);return new ResponseEntity<>(user, HttpStatus.CREATED);}
}

在这个例子中,我们使用@Valid注解对User实体进行校验,并在User类的属性上添加了@NotNull和@Size注解。当请求到达Controller时,Spring会自动对User实体进行校验,如果校验失败则会抛出MethodArgumentNotValidException异常。我们可以使用@ControllerAdvice和@ExceptionHandler来处理校验异常,并返回自定义的错误信息。例如:

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<ErrorResponse> handleValidationException(MethodArgumentNotValidException ex) {BindingResult result = ex.getBindingResult();List<FieldError> fieldErrors = result.getFieldErrors();List<String> errors = new ArrayList<>();for (FieldError fieldError : fieldErrors) {errors.add(fieldError.getField() + ": " + fieldError.getDefaultMessage());}ErrorResponse errorResponse = new ErrorResponse(HttpStatus.BAD_REQUEST, "Validation failed", errors);return new ResponseEntity<>(errorResponse, HttpStatus.BAD_REQUEST);}
}

在这个例子中,我们使用@ControllerAdvice注解来定义全局的异常处理器,并使用@ExceptionHandler注解来处理MethodArgumentNotValidException异常。在处理过程中,我们从异常中获取校验结果并转换成自定义的错误信息,然后封装成ErrorResponse对象并返回。如果请求中包含了校验错误,Spring会自动调用该处理器并返回错误信息。

@Valid @Validated 有什么区别

@Valid和@Validated注解都可以用于实体类属性的校验。它们的主要区别在于支持的校验分组和校验器的不同。

@Valid注解只支持默认分组,即没有使用任何分组的校验注解。它使用的是javax.validation包下的校验器。

@Validated注解支持分组校验,即可以使用指定分组的校验注解进行校验。它使用的是Spring自己的校验器,支持JSR-303和JSR-349规范。

此外@Validated 注解还可以用于方法级别的校验,例如:

@Service
public class UserService {@Validatedpublic void createUser(@NotNull User user) {//...}
}

在这个例子中,我们使用@Validated注解对createUser方法进行校验,并使用@NotNull注解对User参数进行非空校验。如果校验失败,Spring会抛出ConstraintViolationException异常。

Spring 是如何实现校验的

简单理解:

在Spring中,我们可以使用@NotBlank注解对字符串进行非空校验。在实体类的属性上添加@NotBlank注解即可。例如:

public class User {@NotBlankprivate String username;//...
}

在这个例子中,我们使用@NotBlank注解对username属性进行非空校验。当请求到达Controller时,Spring会自动对User实体进行校验,如果校验失败则会抛出MethodArgumentNotValidException异常。

深入理解:

在Spring中,在方法执行前执行校验注解的过程是由MethodValidationInterceptor拦截器实现的。这个拦截器会在方法调用前执行校验注解,如果校验失败会抛出异常。在拦截器中,会先获取方法上的校验注解,然后根据注解的类型,调用不同的校验器进行校验。如果校验失败,会抛出ConstraintViolationException异常。

MethodValidationInterceptor会被Spring的其中一个BeanPostProcessor: MethodValidationPostProcessor在Bean初始化时作为默认的方法校验增强器进行创建。

整体理解:

当Spring框架在执行方法时,会先查找是否存在MethodValidationPostProcessor后置处理器。如果存在,它会在方法执行之前执行校验注解的过程。

MethodValidationPostProcessor后置处理器会在BeanPostProcessor的postProcessBeforeInitialization方法中执行,具体流程如下:

  1. Spring容器启动时,会扫描所有的BeanDefinition,包括MethodValidationPostProcessor。
  2. 当容器实例化MethodValidationPostProcessor时,会调用BeanPostProcessor的postProcessBeforeInitialization方法。
  3. 在postProcessBeforeInitialization方法中,MethodValidationPostProcessor会检查Bean是否包含@Validated注解,并生成一个代理对象。
  4. 当原始Bean方法被调用时,代理对象会执行校验注解的过程。如果校验失败,会抛出异常。
  5. 如果代理对象的校验通过,会调用原始Bean方法并返回结果。

综上所述,Spring解析@Valid的过程主要涉及到MethodValidationPostProcessor后置处理器,在BeanPostProcessor的postProcessBeforeInitialization方法中生成代理对象,并在方法执行前执行校验注解的过程。

校验所需的依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.7.10</version><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></exclusion></exclusions>
</dependency>

如果是SpringBoot项目需要注意判断是否已经存在必须的依赖 spring-boot-starter-validation,注意如果Spring-boot的版本大于3.0必须最第使用JDK17。上面的依赖版本是3.0以下可用的最高版本。

http://www.yidumall.com/news/40959.html

相关文章:

  • wordpress动静分离网站优化建议
  • 在哪个网站可以一对一做汉教百度官网网站
  • 贵港网站制作商务网站如何推广
  • flex网站模板seo点击优化
  • 定制化网站建设怎样免费建立自己的网站
  • 宜兴埠网站建设精准的搜索引擎优化
  • wordpress主题 资源站百度知道网址
  • 自己如何建立一个网站软件定制开发公司
  • 北京哪里能学做网站百度联盟是什么
  • 做网站购买虚拟主机送模板吗百度推广价格表
  • 管理网站怎么做的直播发布会
  • 网站设计素材网站企业qq一年多少费用
  • 重庆整站优化的电话销售网站很卡如何优化
  • wordpress英语怎么读刷seo关键词排名软件
  • 网站源码提取百度网站的网址
  • wordpress语言系统东莞seo优化排名
  • 设计师交流网站seo的中文是什么
  • 江西 网站制作百度关键词搜索量排名
  • 知知网站推荐太原seo推广外包
  • 多产品的网站怎么做seo手机如何制作自己的网站
  • 珠海网站建设网络公司怎么样如何创建一个app平台
  • 重庆市建设工程造价管理总网站无锡网络优化推广公司
  • 如何判断网页是静态还是动态郑州网站优化哪家好
  • 什么云的网站开发平台易观数据app排行
  • 长春做网站长春网站设计如何注册属于自己的网站
  • 医药网站建设手机百度app下载
  • 网站推广的技巧和方法腾讯新闻发布平台
  • 电脑办公软件培训班北京网站seo公司
  • 配音秀做素材网站徐州seo外包公司
  • 西安商城网站建设制作站长工具app下载