公众号中分享了一篇文章,关于SpringBoot集成validation校验参数的,粉丝留言说有坑。

原留言如下:

有坑,你试试^A-\\d{12}-\\d{4}$,这条正则经过validate这个方法无论参数写的对不对都会报验证错误,而用main方法测试是正常的。。

话说,针对这种回复我是不太信了,直觉告诉我,肯定是这位粉丝用错了。但既然粉丝有疑问还是需要专门写一个demo来验证一下的。说写就写。

SpringBoot集成validation

集成过程非常简单,在原项目的pom文件中直接引入如下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

引入之后,便可以在项目中使用@Valid等来进行校验了。

这里写一个简单的示例基于@Valid来验证提交的参数是否合法。首先建一个实体类,LoginForm(使用了Lombok):

@Data
public class LoginForm {@NotBlank(message = "邮箱不能为空")@Emailprivate String email;@NotBlank(message = "密码不能为空")@Length(min = 6,message = "密码长度最小为6位")private String password;@NotBlank@Pattern(regexp = "^A-\\d{12}-\\d{4}$",message = "格式错误")private String other;}

顺便校验了一下其他的参数,最后一个other字段用来校验粉丝提出疑问的正则表达式。

然后,在创建一个Controller类:

@Slf4j
@RestController
public class LoginController {@PostMapping("/login")public void login(@Valid LoginForm loginForm, BindingResult bindingResult) {log.info("loginForm:{}", loginForm);if (bindingResult.hasErrors()) {for (ObjectError error : bindingResult.getAllErrors()) {log.info("error:{}", error.getDefaultMessage());}} else {log.info("参数校验成功!");}}
}

如果参数校验出错,会打印错误日志,如果校验成功则打印“参数校验成功!”。因为是Post请求,咱们就写一个针对该服务的单元测试:

@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@WebAppConfiguration
public class TestLoginController {@Autowiredprivate WebApplicationContext webApplicationContext;@Autowiredprivate MockMvc mockMvc;@Beforepublic void setUp() {mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();}@Testpublic void testLogin() throws Exception {MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/login").param("email", "541075754@qq.com").param("password", "123456").param("other", "A-123456789012-1234").accept(MediaType.APPLICATION_JSON)).andDo(MockMvcResultHandlers.print()).andReturn();int status = mvcResult.getResponse().getStatus();                 //得到返回代码String content = mvcResult.getResponse().getContentAsString();    //得到返回结果log.info("返回结果content={}", content);Assert.assertEquals(200, status); }
}

执行打印测试,查看日志,发现校验通过,并没有出错。至此,粉丝提出的质疑并不成立。而粉丝遇到的问题,很可能是哪个细节导致了校验失败,而他总结的经验就是validation校验参数有坑。

其实这个问题在没有人相互交流的过程中更容易发生。这样是为什么技术人要有自己的圈子,要聚集起来,讨论见真知。最后,欢迎访问我的微信公众号:程序新视界,也欢迎提出更多关于疑问,大家一起进步。

原文链接:《粉丝说SpringBoot集成validation校验参数有坑,我试了试》


程序新视界
公众号“ 程序新视界”,一个让你软实力、硬技术同步提升的平台,提供海量资料

粉丝说SpringBoot集成validation校验参数有坑,我试了试相关推荐

  1. Validation校验参数-API、自定义、手动校验

    Validation校验参数-API.自定义.手动校验 Validation校验参数-API.自定义.手动校验 依赖 约束性注解 @Validated与@Valid的简单对比说明 Demo 校验 自动 ...

  2. SpringBoot集成Redis实战——步骤、坑点、解决方案

    背景 回顾项目中的TODO工作,发现留了一条待办项,即对Redis配置参数的具体含义的了解.开发平台研发期间,由于时间紧张,对于Redis,没有进行相对充分的技术预研,集成的比较粗放,虽然目标达成了, ...

  3. Springboot Bean Validation校验框架

    我们的校验框架通常用于DTO层,用户从前端通过Json串传入值,后端对传入的Json封装到DTO层中,我们对DTO层的元素进行校验,比如邮箱,手机号等等. 首先需要引入bean校验需要的jar包: & ...

  4. springboot+dubbo+validation 进行 rpc 参数校验

    注意:本文dubbo 版本 2.8.4 springboot 版本 2.0.4.RELEASE 项目结构 test-rest (前端消费着,controller 层,springboot+maven项 ...

  5. springboot使用Validation API和全局异常优雅的校验方法参数

    目录 一.为什么使用 Validation 来验证参数 二.如何使用Validation相关注解进行参数校验 三.Validation类的相关注解及描述 四.使用 Validation API 进行参 ...

  6. SpringBoot使用Validation框架完成参数校验AND异常处理

    关于Validation框架:(官方简介) 在任何时候,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情.应用程序必须通过某种手段来确保输入进来的数据从语义上来讲是正确的.在通常的 ...

  7. SpringBoot @Validated注解实现参数校验

    1. 前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的.如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量 ...

  8. Springboot 使用校验框架validation校验

    作者:双斜杠少年 blog.csdn.net/u012373815/article/details/72049796 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上 ...

  9. bean validation校验方法参数_Springboot 使用校验框架validation校验

    作者:双斜杠少年 blog.csdn.net/u012373815/article/details/72049796 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上 ...

最新文章

  1. (二)阅读器客户端开发实战_需求阐述
  2. 电脑分屏软件_一招定鲜 | 电脑实现分屏解决了办公和娱乐
  3. 什么都不必说 Gradle--buildTypes--productFlavors
  4. gcc / -E、-S、-c 和 -o
  5. Linux glibc内存管理:用户态内存分配器——ptmalloc实现原理
  6. Elementary OS 系统Java8环境的配置
  7. python中的引用,Python里的引用和拷贝
  8. 如何用15天摸清一个新的行业?
  9. Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解
  10. LaTeX插入图片时,图总是置顶的解决办法
  11. LaTeX 中的数学字体
  12. 音频属性采样率、通道数、位数、比特率、帧等
  13. 北上杭是梦!“郑福贵”才是中国智慧城市的真相
  14. 【企业为什么要进行数字化转型】之数字时代新模式
  15. PowerPoint2019删除当前ppt页上的某个动画
  16. 计算机网络之网络安全
  17. 80%的人分不清传感网与物联网的区别,这二者之间的具体区别到底是什么?
  18. 双重边际效用(Double Marginalization)
  19. 使用腾讯文档收集快递信息
  20. 一个tab标签效果类

热门文章

  1. python最大公约数计算的程序代码_Python实现的求解最大公约数算法示例
  2. rac archiving
  3. 为ipad搭建code-server服务
  4. 优秀的NAS不光只有群晖,看看威联通在安全性上如何K掉群晖
  5. matlab分频.m,分频器m是什么意思 音响分频器m. TW那个代表高音那个代表是低音?...
  6. 招生啦!清华大学SIGS人工智能硕士项目2021年硕士研究生普通招考说明
  7. 服务器没有显示器能接笔记本吗,笔记本能连显示器吗,笔记本怎么才能接显示器(图文)...
  8. week3 day3 迭代器和生成器
  9. javaScript打气球小游戏
  10. Sqlserver 中的Iif语句