Java笔记 #07# Hibernate Validator
Hibernate Validator是Spring Boot默认附带的标准校验API(javax.validation)实现。
应用实例(配合切面)
采用注解定义切面.java
@Aspect
@Configuration
public class ParameterValidator { private ExecutableValidator executableValidator; public ParameterValidator() {
// 开启快速失败返回模式(顾名思义...)
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class).
configure().addProperty("hibernate.validator.fail_fast", "true" ).
buildValidatorFactory();
executableValidator = validatorFactory.getValidator().forExecutables();
} @Pointcut("execution(public * org.sample.website.service.impl.*.*(..))")
public void serviceMethod() {} @Around("serviceMethod()")
public Object validate(ProceedingJoinPoint jp) throws Throwable {
Method method = ((MethodSignature) jp.getSignature()).getMethod();
Set<ConstraintViolation<Object>> violations = executableValidator.validateParameters(jp.getThis(), method, jp.getArgs());
if (!violations.isEmpty()) {
throw new ValidationException(violations.iterator().next().getMessage());
}
return jp.proceed();
}
}
PS. ValidationException是标准API中定义的运行时异常
/
接口.java
public interface MessageService { // 单独校验参数
Message leaveMessage(@NotNull(message = "昵称不能为空") String nickname,
@NotNull(message = "内容不能为空") String content); Message leaveMessage(@Valid Message message); // 校验实体 List<Message> listMessage(int offset, int limit);
}
/
参数中的实体只有在@Valid(递归校验符)标注后才会被校验:
public class Message { private Long id;
private String nickname;
@NotNull(message = "内容不能为空!")
private String content; public Message() {
}
/
测试代码片段(Spring环境):
String nickname = "test" + (int) (Math.random() * 10);
messageService.leaveMessage(new Message(nickname, null));
运行结果:
javax.validation.ValidationException: 内容不能为空! at org.sample.website.aspect.ParameterValidator.validate(ParameterValidator.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
参考资料
- 在系统中使用Bean Validation验证参数
- springboot使用hibernate validator校验
- Hibernate Validator 校验方法的参数,返回值,构造函数
- http://hibernate.org/validator/documentation/
Java笔记 #07# Hibernate Validator的更多相关文章
- java后台校验 hibernate validator
链接 : https://www.cnblogs.com/softidea/p/6044123.html
- hibernate Validator 6.X 的学习,bean的约束(字段,get方法上的验证)
一:背景说明 验证数据是一个常见的任务,它贯穿于所有应用层,从呈现到持久层.通常在每个层中都执行相同的验证逻辑,耗时且容易出错.为了避免这些验证的重复,开发商往往把验证逻辑直接进入的领域模型,在领域类 ...
- org.hibernate.validator.constraints.NotBlank' validating type 'java.lang.Integer
使用hibernate时,在save方法时,报了:org.hibernate.validator.constraints.NotBlank' validating type 'java.lang.In ...
- JAVA自学笔记07
JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...
- hibernate 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.xxx 这类的问题
<!-- 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.intern ...
- hibernate.validator.constraints.NotEmpty校验请求参数报错java.lang.NoClassDefFoundError: javax/el/PropertyNotFoundException
spring maven项目,使用hibernate validator 注解形式校验客户端的请求参数. hibernate-validator版本:5.0.2.Final validation-ap ...
- Caused by: java.lang.AbstractMethodError: org.hibernate.validator.internal.engine.ConfigurationImpl
1.错误描述 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanCreationException: Error ...
- java.lang.NoClassDefFoundError: org/hibernate/validator/internal/engine/DefaultClockProvider
①在springboot的spring-boot-starter-web默认引入了以下依赖: <dependency> <groupId>com.fasterxml.jacks ...
- Java:并发笔记-07
Java:并发笔记-07 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 6. 共享模型之不可变 本章内容 不可变类的使用 不可变类设计 无状态类设计 6.1 ...
随机推荐
- 关于 vuex 的使用忠告
第一.看明白这张图在说话 简单解释一下,actions接收到components的行为后actions请求api 等获取数据,提交到mutations,然后mutations中才改变state ,反映 ...
- OO第一单元总结
OO第一单元作业总结 一.前言 开学四周,不知不觉已经做了三次OO作业.事实上,每一次作业对我来说都是很大的挑战,需要花费大量的时间和精力来学习. 虽然学得很艰苦,但最后还是连滚带爬地完成了.(好惨一 ...
- 提高你的python:解释 yield 和 Generators(生成器)
转自:http://www.oschina.net/translate/improve-your-python-yield-and-generators-explained 原文:http://www ...
- MTQQ 物联网
这个是学校的SRP项目.去年12月做了大概3周. 直接摘个人总结报告如下: 在本次“学生研究计划”项目,研究课题是“基于JAVA的智能家居公众号”.根据课题要求之一:以微信作为媒介,实现智能设备的远程 ...
- grumphp在docker里问题
.git/hooks/commit-msg .git/hooks/pre-commit 这两个文件的路径指向为docker环境下,如果在容器外执行提交会发现找不到路径,所以要修改这两个文件的路径为容器 ...
- 从github上下载一个项目的子目录
https://github.com/pbojinov/developer.chrome.com/tree/master/extensions/examples/extensions/proxy_co ...
- 推荐一个Monokai风格的EditPlus配色方案
如何配置 找到EditPlus的配置文件editplus_u.ini,该文件默认在:系统盘:\Users\用户名\AppData\Roaming\EditPlus目录中.将其中的内容替换为如下即可: ...
- Windows10 磁盘100%解决办法
此电脑->管理->任务计划程序->\Microsoft\Windows 一.\MemoryDiagnostic 禁用:ProcessMemoryDiagnosticEvents和Ru ...
- vue跳转到外部链接
<span @click="see('http://xxxx">点击跳转到xxx</span> 方法:(调用函数) See (e) { window.loc ...
- condition版生产者与消费者模式
1.简介 在爬虫中,生产者与消费者模式是经常用到的.我能想到的比较好的办法是使用redis或者mongodb数据库构造生产者消费者模型.如果直接起线程进行构造生产者消费者模型,线程容易假死,也难以构造 ...