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

java用注解优雅校验入参

1.在controller层添加注解@Validated

@validated和@valid注解都能进行参数校验

区别在于@Validated是Spring提供,@Valid是jdk提供,@Validated功能更为强大,提供了分组功能和验证排序功能

    @GetMapping("/loginByUsername")@Operation(summary = "账号登录")public Result<Object> loginByUsername(@Validated @RequestBody SuperAdminParam superAdminParam){return Result.success(superAdminManager.loginByUsername(superAdminParam));}

2.在入参实体类添加校验注解

@NotNull是校验不为空

@NotBlank是校验字符串不为null且去掉前后空格后长度大于0

@Data
public class SuperAdminParam extends BasePageQuery{@NotBlank(message = "账号不能为空")private String username;@NotBlank(message = "密码不能为空")private String password;...
}

注意:如果是get请求,在controller类上添加@Validated注解,然后在参数前加上相应的注解校验即可

...
@Validated
public class SuperAdminController {...public Result<Object> detail(@NotNull(message = "id不能为空") Integer id){...}

3.添加Validation配置

默认的是对所有的实体类属性进行验证,之后才会抛出异常,这里配置成只要检测到一个参数有问题就直接抛出异常

@Configuration
public class ValidatorConfig {/*** validation校验配置*/@Beanpublic Validator validator() {ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).configure().failFast(true).buildValidatorFactory();Validator validator = validatorFactory.getValidator();return validator;}
}

4.定义全局异常处理进行返回

    
@ExceptionHandler(value = MethodArgumentNotValidException.class)public Result<?> validateException(MethodArgumentNotValidException e) {List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();List<String> list = new ArrayList<>();for (FieldError error : fieldErrors) {list.add(error.getField() + error.getDefaultMessage());}return Result.error(500, list.get(0).toString());}@ExceptionHandler(value = ConstraintViolationException.class)public Result<?> validateException(ConstraintViolationException e) {Set<ConstraintViolation<?>> violations = e.getConstraintViolations();List<String> list = new ArrayList<>();for (ConstraintViolation<?> item : violations) {list.add(item.getMessage());}return Result.error(500, list.get(0).toString());}

http://www.dtcms.com/a/482753.html

相关文章:

  • 平台网站建设收费制作网页素材图片
  • 基于OpenCV的实时疲劳检测系统实现
  • HTML5基础——4、表格
  • Docker 通信核心:docker.sock 完全指南
  • Flutter---Button
  • 网站建设需要敲代码吗信息流推广实施策划书
  • 广元网站建设电子商务网站建设主要内容
  • 4.4-中间件之gRPC
  • 网络与通信安全课程复习汇总1——课程导入
  • Qt模型控件:QTreeViewQTreeWidget
  • 河南省城乡建设厅官网廊坊快速优化排名
  • 网站建设应该考虑哪些问题企信宝
  • 青海做网站最好的公司互联网推广引流
  • 一天一个设计模式——装饰器模式
  • 婚恋交友 APP 核心功能分析:从匹配逻辑到用户体验的全链路设计
  • 用一个 prompt 搭建带 React 界面的 Java 桌面应用
  • 宁波建网站价格wordpress注明网站
  • wordpress添加网站地图黑龙江新闻头条最新消息
  • 机械臂装配自动化推动紧固件设计革新
  • JSAR 入门教程:从零开始开发空间天气小摆件
  • 【Pytorch】什么是梯度
  • 核间通信机制
  • 吕口*云蛇激光*VS*薄利魔刀*武打算法的方案
  • CSP-S模拟赛五总结(实际难度远低于提高组)
  • 网站建设服务器的配置wordpress 输出sql
  • 邵阳建设网站公司app在线生成平台 免费
  • 如何在第三方网站做推广什么关键词可以搜到那种
  • 深度解析 PostgreSQL 中的 ctid、xmin、xmax:从原理到实战
  • 2-sat
  • KPI、OKR 和 GS 的区别