在SpringMvc中使用hibernate的hibernate-validator来进行校验入参,如@NotNull , @Length
2018-08-14 18:01
417 查看
版权声明:转载请标明出处~~ https://blog.csdn.net/zzzgd_666/article/details/81671753
作为参数进行访问,只会报
自从ssm框架火起来以后,ssh框架也就不再被人青睐,同样的hibernate似乎已经成了历史, 但是这几天我发现hibernate框架居然用在了我们公司的代码中,所以赶紧研究了一下.
配合代码来介绍
1. 依赖
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.1.Final</version> </dependency>
2. 接收前段传过来的参数的Dto类
import javax.validation.constraints.NotNull; private class UserReqDto{ @NotNull(message = "用户名不能为空") private String userName; @NotNull(message = "密码不能为空") private String password; @NotNull(message = "联系地址不能为空") private String address; @NotNull(message = "电话号码不能为空") private String phone; ...getter and setter... }
2.控制层
@Controller public class Test { @RequestMapping(value = "/test", method = RequestMethod.GET) public String test(@Valid @RequestBody UserReqDto userDto){ //service的逻辑... }
这个时候如果直接发起请求,UserReqDto 其中一个字段为null,就会报错, 如果userName=null
...arguments []; default message [userName]]; default message [用户名不能为空]]
如果想要或者这个message信息,可以通过Spring的@ExceptionHandler和@ControllerAdvice
统一处理异常
参数校验失败,会经过spring的
org.springframework.web.bind.MethodArgumentNotValidException异常类抛出异常,我们处理这个异常类的信息就可以了
@ControllerAdvice @ResponseBody public class ExceptionHandle { private static final Logger log = LoggerFactory.getLogger(ExceptionHandle.class); public ExceptionHandle() { } @ExceptionHandler({MethodArgumentNotValidException.class}) public String handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { BindingResult result = e.getBindingResult(); FieldError error = result.getFieldError(); String field = error.getField(); String code = error.getDefaultMessage(); String message = String.format("%s:%s", field, code); log.warn("参数验证失败:" + message); return "参数验证失败:" + message; } }
弹出的显示信息:
2018-08-14 17:54:27.673 WARN com.zgd.exception.ExceptionHandle Line:124 - 参数验证失败:mchtName:mchtName不能为空
3. 其他的valid注解
hibernate除了JSR303的标准之外还额外提供了其他的验证注解。下表是JSR303支持的验证注解:
hibernate-validator附带的注解
4. group分组
比如name,password,age在登录的时候,需要name和password不为空, 在修改年龄的时候,仅需要age不为空, 所以在不同的需求中, 校验也不一样, 这个时候我们可以分组
@NotNull(message = "用户名不能为空", groups = GroupA.class) private String userName; @NotNull(message = "密码不能为空", groups = GroupB.class) private String password;
这个时候我们需要自定义没有方法的接口:
public interface GroupA { } public interface GroupB { }
然后在方法中指定我们需要哪个group的校验就可以了
public String test(@Validated(GroupA.class) @RequestBody UserReqDto dto){ }
这个时候将
{"userName":null,"password":null}
作为参数进行访问,只会报
用户名不能为空阅读更多
相关文章推荐
- 使用SpringMVC时配合福建快三开奖网平台架设hibernate-validate进行参数的合法性校验,能节省一定的代码量.
- springmvc使用hibernate-validator校验框架实现后端校验
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
- SpringMVC集成Hibernate Validator进行参数校验
- springMVC校验之hibernate validator校验器的使用
- SpringMVC 使用JSR-303进行校验 @Va 4000 lid
- 基于hibernate_validator的异步表单校验框架使用说明
- springmvc使用JSR-303进行数据校验实例
- SpringMVC 使用JSR-303进行校验 @Valid
- java使用validator进行校验
- SpringMVC 使用JSR-303进行校验Bean Validation------分组校验
- 使用SpringMVC进行数据的传送,数据来自mysql数据库 (1)没有使用hibernate
- SpringMVC和FreeMarker整合Hibernate-validator在页面渲染校验错误信息
- 如何使用SpringMVC进行数据校验
- Hibernate-validator校验框架使用教程
- SpringMVC 使用JSR-303进行校验 @Valid
- [置顶] SpringMVC 之 Validation介绍—— 使用Validator接口进行验证
- 高效使用hibernate-validator校验框架
- SpringMVC 使用JSR-303进行校验
- SpringMVC 使用JSR-303进行校验 @Valid