hibernate-validator实现入参校验(包含get与post)
来源:互联网 发布:linux sort head 编辑:程序博客网 时间:2024/06/05 19:57
最近在实现一个功能时,由于入参特别多,有的入参需要不为空,有的入参可以为空,这中间如果手动一个一个判断,重复代码太多,所以就想到了用hibernate-validator来实现。中间诸多波折,现分享如下。
首先,引入maven依赖,具体的版本可以调整。
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>5.1.3.Final</version></dependency>然后,定义入参的一个实体类,比如student,用上一些注解:
import org.hibernate.validator.constraints.NotBlank;import org.springframework.stereotype.Component;@Component("ValidStudent")public class Student {@NotBlank(message="缺少姓名")private String name;@NotBlank(message="缺少性别")private byte sex;private String id;...}下面是重点:
一、在处理get请求时,可以使用spring自带的注解,将入参转成所需的对象,同时利用注解进行非空及其他检查
@RequestMapping(value = "/addStudent", method = { RequestMethod.GET })public ModelAndView addStudent(HttpServletRequest request,@ModelAttribute("ValidStudent") @Valid Student student, BindingResult bindingResult) {ModelAndView mav = new ModelAndView();if (bindingResult.hasErrors()) {// 入参认证不通过mav.addObject(JSONViewResolver.KEY_REST_RESPONSE,wrap("206000001", bindingResult.getAllErrors().get(0).getDefaultMessage()));return mav;} else {return addStudent(student, request);}}
get时需要入参中包含student的相关属性,利用@ModelAttribute这个注解就能进行对象属性赋值,@Valid能对属性进行检查。如果检查不通过,则错误信息存储在bindingResult中,可以取出bindingResult中的内容,来返回错误信息。
二、在处理post请求时,如果是表单,就比较简单,直接可以通过@ModelAttribute来转换对象,如果不是通过表单,纯粹通过参数,则比较麻烦,此时就不能用注解的方式来验证,需要通过代码来实现。
private static Validator validator;@PostConstructpublic static void setUp() {ValidatorFactory factory = Validation.buildDefaultValidatorFactory();validator = factory.getValidator();}
在controller中先初始化一个validator。
@RequestMapping(value = "/addStudent", method = { RequestMethod.POST })public ModelAndView addStudent(HttpServletRequest request) {ModelAndView mav = new ModelAndView();JSONObject msg = (JSONObject) request.getAttribute("msg");Student student = JSON.toJavaObject(msg, OrderRequest.class);Set<ConstraintViolation<student>> constraintViolations = validator.validate(student);if (!constraintViolations.isEmpty()) {// 入参认证不通过mav.addObject(JSONViewResolver.KEY_REST_RESPONSE,wrap("206000001", constraintViolations.iterator().next().getMessage()));return mav;} else {return addStudent(orderRequest, request);}}
可以先将入参通过fastjson转成对象,然后再调用validator.validate(T t)来验证,错误信息存储在constraintViolations中,这样就能拿出来了。
以上如有不妥,恳请指正。同时,post方式是否有更加简洁的注解方式解决,大家一起探讨。
0 0
- hibernate-validator实现入参校验(包含get与post)
- 入参校验工具
- HTTP协议与HTML表单 (包含GET与POST的区别)
- GET与POST(0212)
- Http POST与GET请求JAVA实现
- Java URLConnection 实现 HTTP get与post
- 使用Java、hibernate validator注解校验入参,格式化出参(出参)
- 简单实现hibernate-validator拓展
- Hibernate Validator实现数据校验
- Volley 对于POST、GET传参方式 从入坑与出坑
- java实现url访问(get,post)
- Java实现http(post、get)请求
- CHttpFile实现Get/Post
- AFNetWorking实现GET、POST
- AFNetWorking实现GET、POST
- get与post的区别 (转载)
- get与post区别(很全~)
- post与get 区别 (转载学习)
- js笔记(3)
- 不常用的any some all
- Activity生命周期的执行流程
- 天轰穿C#教程之数学运算符
- android onSaveInstance方法
- hibernate-validator实现入参校验(包含get与post)
- ActiveMQ+MQTT实现Android点对点消息通知
- 怎样解决VS2013模块对于SAFESEH 映像是不安全的
- 提取表的sql原句
- qtp vb脚本小技巧(二)
- eclipse启动出现“An Error has Occurred. See the log file”解决方法
- 黑马iOS_新的开始
- 动态模糊,毛玻璃
- openssl安装