在写一些controller协议的时候,有些时候从前端传过来的参数较多,好的办法是定义一个实体类来封装请求参数,但是用实体类封装参数后,无法对参数值进行校验,可以使用spring的@Validated 结合java validation、hibernate validation注解进行校验。

个人建议使用spring的Validated注解,而不要使用hibernate的validat注解,hibernate注解适用于和数据库相关连的对象。

1.@validated 注解

@Validated is org.springframework.validation.annotation.Validated.

@RequestMapping(value = "/regist", method = {RequestMethod.GET, RequestMethod.POST})

@ResponseBody

public Object hualalaRegist(@Validated RegistVO registVO)

... }

@Validated 注解后,表示需要对其中的参数进行校验。

然后再对应的javabean里面的字段上使用注解校验字段,具体的注解见下面章节2

public class RegistVO {

@NotBlank

@Pattern(regexp = "^\\d{11}$", message = "手机号码格式错误")

String phoneNumber; //手机号码

@NotBlank

String name; //姓名

@NotBlank

String loanBody;//借款主体

@NotBlank

String loanBodyId;//借款主体ID

@NotNull

BigDecimal borrowAmount;//借款金额

}

使用这个注解去校验参数之后如果参数不合法会抛出一个异常 ConstraintViolationException。结合上一篇博客讲的全局异常处理,这样你就可以捕获到这个异常,然后进行统一的处理,比如返回给前端错误信息等。

2.java validation 注解

注解也可以直接使用在方法的参数上,比如

public void getUser(@NotNull String name) {}

还可以使用在javabean里面的字段上,当javabean作为一个参数的时候使用@Validated注解才能实现校验,如上面章节1所讲

JSR提供的校验注解:

@Null 被注释的元素必须为 null

@NotNull 被注释的元素必须不为 null

@AssertTrue 被注释的元素必须为 true

@AssertFalse 被注释的元素必须为 false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max=, min=) 被注释的元素的大小必须在指定的范围内

@Digits (integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past 被注释的元素必须是一个过去的日期

@Future 被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

3.hiberate validation 注解

@Email 被注释的元素必须是电子邮箱地址

@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串的必须非空

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

@URL(protocol=,host=,    port=, regexp=, flags=) 合法的url

主要区分下@NotNull  @NotEmpty  @NotBlank 3个注解的区别:

@NotNull           任何对象的value不能为null

@NotEmpty       集合对象的元素不为0,即集合不为空,也可以用于字符串不为null

@NotBlank        只能用于字符串不为null,并且字符串trim()以后length要大于0

使用注解的好处是不在需要在Controller层去写复杂的参数校验逻辑,大大减少代码行数,注解校验参数与方式建议只在Controller层使用,Service层还是建议自己写代码去实现参数校验,具体原因就是注解并不是万能的,过多的使用注解会让代码可读性变差。

————————————————

版权声明:本文为CSDN博主「Yaphets丶混世大魔王」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/tianhouquan/article/details/81905699

spring多参java注解_spring参数注解校验相关推荐

  1. java分组校验_SpringBoot @Validated注解实现参数分组校验的方法实例

    前言 在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据. 1.首先还是先导包,导入pom文件. org.springframework.bo ...

  2. AspectJ切面自定义注解实现参数分组校验——基础概念(2)

    AspectJ切面自定义注解实现参数分组校验--基础概念(2) 一.环境 二.创建AspectJ 2-1.基础概念 2-2.Pointcut规则表达式 2-3.切点标志符pointcut design ...

  3. java filter 注解_Spring常用注解及自定义Filter的实现

    @Configuration通常用在配置类上,告诉spring这是一个配置类(配置类类似配置文件,区别在于用类的形式来表现xml: @Service用于标注业务层组件service层, @Contro ...

  4. emailjava中怎么校验_Java使用注解实现参数统一校验功能

    在项目开发中,当使用配置文件的时候,需要对一些配置参数进行合法校验,如果不存在则会抛出异常或者提醒用户重新修改配置文件后运行系统. 以前的做法就是读取到配置文件后,每个配置项挨个检查,写多个if判断是 ...

  5. @aspect注解_Spring自定义注解玩法大全,从入门到放弃

    在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...

  6. java后端传参数据校验

    前端传数据到后端,后端需要对数据进行必要的数据校验,本人使用SpringBoot的validation pom文件引入包 <dependency><groupId>org.sp ...

  7. java mvc 注解_Spring MVC注解开发入门

    注解式开发初步 常用的两个注解: @Controller:是SpringMVC中最常用的注解,它可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求.标识当前 ...

  8. java 按条件注解_Spring 条件注解 @Conditional

    Spring 4提供了一个更通用的基于条件的Bean的创建方式,即使用@Conditional注解. 下面的示例将以不同的操作系统作为条件,我们将通过实现Condition接口,并重写其matches ...

  9. autowired java配置_Spring自动注解标签@Autowired不能注入xml配置的bean吗?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 配置service的xml service代码 public class LoginServiceImpl extends BaseDaoServiceI ...

最新文章

  1. AtcoderCodeForces杂题11.6
  2. 研究:低智商男人易出轨
  3. 最长不重复字符串python_Python简单实现查找一个字符串中最长不重复子串的方法...
  4. PAT乙级 1086 就不告诉你 (附测试点1,2排查及用例)
  5. Log4Net使用手册
  6. Pantera Capital CEO:比特币有望在今年夏天达到11.5万美元
  7. 前端响应式のmedia文件分离
  8. 安卓能硬改的手机机型_这款iPhone手机专属特效AR相机,我真的爱了
  9. 油气田开发之油气水井维护性修井作业
  10. caesar java_java实现caesar加解密算法
  11. vue图片时间轴滑动_Vue之时间轴组件
  12. 浪涌保护器,SPD浪涌保护器的分类和选型标准
  13. 【计算机网络】Web应用的安全问题——概述
  14. IE浏览器下载文本文件(txt,csv等)
  15. 【算法设计与分析】分支限界法解决单源最短路径问题:输入带权图G=(V,E)以及出发顶点s,然后用分支限界法解决问题,要求输出路径和长度以及计算时间;
  16. Tahoma,Arial和宋体英文字体
  17. 百度硬盘搜索安装步骤
  18. SQL怎么实现模糊查询
  19. 图像模板匹配算法 c++
  20. 关于线控改造应用丹佛斯转向一点心得

热门文章

  1. cad lisp 二次抛物线_cad画二次抛物线
  2. HTML基础(三)---- hr水平线
  3. MySQL数据库 第4章:数据库设计
  4. GVM升级后启动异常处理
  5. 如何设置无线路由连接无线wifi
  6. 安装ubuntu20.4桌面系统
  7. IJCAI2021会议论文列表(可下载)
  8. 高通物联网智能WIFI芯片-QCA4002/QCA4004
  9. 学习笔记2 - 利用元数据管理数据质量
  10. 基于STM32F1实现秒表及万年历功能【寄存器版】