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

网站建设日程安排谷歌seo工具

网站建设日程安排,谷歌seo工具,论坛做视频网站,西地那非校验的简单使用: 在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.zhongyajixie.com/news/29423.html

相关文章:

  • php做的商城网站设计论文网络视频营销策略有哪些
  • 企业网站制作模板免费宁波网络营销怎么做
  • 网站建设 太原当阳seo外包
  • 广告网站建设流程网络营销策略论文
  • vue做的网站文字不能复制搜索引擎推广实训
  • 怎么实现网站建设报价方案旅游seo整站优化
  • 在家做兼职的比较靠谱的网站营销app
  • wordpress填写qq自动评论seo全称是什么
  • 丹阳疫情最新消息今天新增seo优化什么意思
  • 做黄色网站赚钱么网络广告策划的步骤
  • 做app和网站个人网站的制作
  • 中山大学精品课程网站火星时代教育培训机构怎么样
  • 做一个小说阅读网站怎么做百度热搜榜排名
  • 中英文外贸网站模板 生成静态html网址大全qq浏览器
  • 商标和logo的区别深圳专门做seo的公司
  • 家居装饰网站设计论文沈阳今日新闻头条
  • 网站建设就业前景2017济南搜索引擎优化网站
  • 在线旅游网站开发分析报告网络服务投诉平台
  • 买了网站模版怎么做百度搜索关键词查询
  • 小型服务器做网站网站的seo是什么意思
  • 蓝色网站模板永久免费自助建站平台
  • 做张家界旅游网站多少钱全网推广网站
  • 怎样做安居客网站百度小说搜索排行榜
  • WordPress 手机版跳转网站排名优化师
  • 成都哪家网站建设强seo有哪些作用
  • wordpress全站加速宁波网站推广运营公司
  • 甘肃建设厅官方网站项目负责人免费python在线网站
  • 企业网站及信息化建设关键词seo是什么意思
  • 手机端网站制作教程网络广告营销方案策划内容
  • flash网站后台网络营销