概述

Spring MVC支持Bean Validation,通过这个验证技术,可以通过注解方式,很方便的对输入参数进行验证,之前使用的校验方式,都是基于Bean对象的,但是在@RequestParam中,没有Bean对象,这样使得校验无法进行,可以通过使用@Validated注解,使得校验可以进行。

校验bean对象

一般校验bean对象,为了可以自动的校验属性,可以通过两步解决:

一、声明对象

  1. package com.github.yongzhizhan.draftbox.model;
  2. import javax.validation.constraints.Size;
  3. /**
  4. * 带验证的对象
  5. * @author zhanyongzhi
  6. */
  7. public class Foo {
  8. private String validString;
  9. @Size(min = 1, max = 5)
  10. public String getValidString() {
  11. return validString;
  12. }
  13. public void setValidString(final String vValidString) {
  14. validString = vValidString;
  15. }
  16. }

二、通过@Valid注解使用对象

  1. @ResponseBody
  2. @RequestMapping(value = "validObject", method = RequestMethod.POST)
  3. @ResponseStatus(HttpStatus.OK)
  4. public String validObject(
  5. @RequestBody()
  6. @Valid Foo vFoo, BindingResult vBindingResult){
  7. return vFoo.getValidString();
  8. }

校验RequestParams

使用校验bean的方式,没有办法校验RequestParam的内容,一般在处理Get请求的时候,会使用下面这样的代码:

  1. @ResponseBody
  2. @RequestMapping(value = "validString", method = RequestMethod.GET)
  3. @ResponseStatus(HttpStatus.OK)
  4. public String validString(
  5. @RequestParam(value = "str", defaultValue = "")
  6. String vStr){
  7. return vStr;
  8. }

使用@Valid注解,对RequestParam对应的参数进行注解,是无效的,需要使用@Validated注解来使得验证生效。操作步骤如下:

一、声明错误处理类

  1. package com.github.yongzhizhan.draftbox.controller;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.http.HttpStatus;
  4. import org.springframework.stereotype.Component;
  5. import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
  6. import org.springframework.web.bind.annotation.ControllerAdvice;
  7. import org.springframework.web.bind.annotation.ExceptionHandler;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9. import org.springframework.web.bind.annotation.ResponseStatus;
  10. import javax.validation.ValidationException;
  11. @ControllerAdvice
  12. @Component
  13. public class GlobalExceptionHandler {
  14. @Bean
  15. public MethodValidationPostProcessor methodValidationPostProcessor() {
  16. return new MethodValidationPostProcessor();
  17. }
  18. @ExceptionHandler
  19. @ResponseBody
  20. @ResponseStatus(HttpStatus.BAD_REQUEST)
  21. public String handle(ValidationException exception) {
  22. System.out.println("bad request, " + exception.getMessage());
  23. return "bad request, " + exception.getMessage();
  24. }
  25. }

二、声明@Validated并加上校验注解

  1. package com.github.yongzhizhan.draftbox.controller;
  2. import com.github.yongzhizhan.draftbox.model.Foo;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.validation.BindingResult;
  6. import org.springframework.validation.annotation.Validated;
  7. import org.springframework.web.bind.annotation.RequestBody;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RequestMethod;
  10. import org.springframework.web.bind.annotation.RequestParam;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. import org.springframework.web.bind.annotation.ResponseStatus;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import javax.validation.Valid;
  15. import javax.validation.constraints.Size;
  16. @RestController
  17. @SuppressWarnings("UnusedDeclaration")
  18. @Validated
  19. public class IndexController {
  20. @ResponseBody
  21. @RequestMapping(value = "validString", method = RequestMethod.GET)
  22. @ResponseStatus(HttpStatus.OK)
  23. public String validString(
  24. @RequestParam(value = "str", defaultValue = "")
  25. @Size(min = 1, max = 3)
  26. String vStr){
  27. return vStr;
  28. }
  29. }

代码

在github中查看完整代码

参考

Bean Validation 技术规范特性概述

Validation, Data Binding, and Type Conversion

在Spring MVC中使用注解的方式校验RequestParams的更多相关文章

  1. Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx" ...

  2. Spring MVC 中 @ModelAttribute 注解的妙用

    Spring MVC 中 @ModelAttribute 注解的妙用 Spring MVC 提供的这种基于注释的编程模型,极大的简化了 web 应用的开发.其中 @Controller 和 @Rest ...

  3. spring 以及 spring mvc 中常用注解整理

    spring 以及 spring mvc 中常用注解整理 @RequestMapping(映射路径) @Autowired(注入 bean 对象) 例如: @Autowired private Bas ...

  4. Spring MVC中基于注解的 Controller

         终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响 ...

  5. 0001 - Spring MVC中的注解

    1.概述 Spring MVC框架提供了功能强大的注解,大大简化了代码开发的同时也提升了程序的可扩展性 2.注解 2.1.@RequestMapping Spring MVC通过@RequestMap ...

  6. Spring MVC中@RequestMapping注解使用技巧(转)

    @RequestMapping是Spring Web应用程序中最常被用到的注解之一.这个注解会将HTTP请求映射到MVC和REST控制器的处理方法上. 在这篇文章中,你将会看到@RequestMapp ...

  7. Spring MVC中@ControllerAdvice注解实现全局异常拦截

    在网上很多都把Advice翻译成增强器,其实从翻译工具上看到,这个单词翻译是忠告,通知的意思. 首先这个注解实在Spring Web包下,而Spring MVC离不开Spring Web的依赖,所以经 ...

  8. spring mvc中的注解说明

    注解扫描 context:component-scan 包扫描 <context:component-scan base-package="org.bdp"> < ...

  9. Spring Mvc如何通过注解的方式设置视图解析器的优先级

    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalRes ...

随机推荐

  1. django 创建数据库表的linux命令

    一旦你觉得你的模型可能有问题,运行 python manage.py validate . 它可以帮助你捕获一些常见的模型定义错误. 模型确认没问题了,运行下面的命令来生成 CREATE TABLE ...

  2. ccnu-线段树联系-单点更新2-B

    B - 单点更新2 Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Des ...

  3. struts配置。泪奔...

    说多了都是泪啊,配置一个环境一天才搞定.不错the requested resource (/login) is not available in struts,就是找不到什么什么class.亦或th ...

  4. leetcode:Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  5. HibernateTools的使用

    1. 到 Hibernate.org官网上 下载最新版的 Hibernate Tools,我用的是 HibernateTools-3.2.4.GA版 2. 将 下载下来的压缩包解压缩,里面会有 plu ...

  6. CSS中position:fixed的用法

    我们都知道CSS中定位属性position的值,除了默认的值外,还有absolute,relative和fixed.我平时比较常用absolute和relative,而position:fixed却没 ...

  7. 使用public key来做SSH authentication

    public key authentication(公钥认证)是对通过敲用户名.密码方式登录服务器的一种替代办法.这种方法更加安全更具有适应性,但是更难以配置. 传统的密码认证方式中,你通过证明你你知 ...

  8. Less tips:声明变量之前可以引用变量!

    Less中的variable可以在使用之后才被声明,这一特性对于希望覆盖前期声明的(比如bootstrap等第三方library的variable)变量,从而优雅地 使用你希望的效果提供了便利. 比如 ...

  9. activiti 源码笔记之startProcess

    rumtimeService.startProcessInstanceByXX方法将启动流程的任务委派给StartProcessInstanceCmd,此时会根据rumtimeService.star ...

  10. jboss集成eclipse

    eclipse Kepler + Jboss7.1 参考引用文档: http://www.tekdigest.com/how-to-install-jboss-tools-in-eclipse.htm ...