`
zwtlong
  • 浏览: 167746 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Spring MVC中修改校验的异常信息

阅读更多
原文出处: Spring MVC中修改校验的异常信息
作者: Jet Mah from Java堂
声明: 可以非商业性任意转载, 转载时请务必以超链接形式标明文章原始出处、作者信息及此声明!

使用一个例子来说明一下,Spring使用的是3.0.x:

  1. public class Account {
  2.     @ Pattern ( regexp = " [a-z0-9]{3,50} " )
  3.     private   String name ;
  4.  
  5.     @ NotNull
  6.     @ NumberFormat ( style = Style . CURRENCY )
  7.     private   BigDecimal balance = new BigDecimal ( " 1000 " ) ;
  8.  
  9.     @ DateTimeFormat ( style = " S- " )
  10.     @ Future
  11.     private   Date renewalDate = new Date ( new Date () . getTime () + 31536000000 L ) ;
  12.  
  13.     // 省略 getter & setter...
  14. }

接下来使用注解创建一个Controller:

  1. @ Controller
  2. @ RequestMapping ( value = " /account " )
  3. public   class AccountController {
  4.  
  5.     /**
  6.      * 如果view采用JSP的话<code>@ModelAttribute</code>注解可以省略,但是如果是使用Velocity或FreeMarker
  7.      * 的话必须要加上,而且<code>@Valid</code>注解和后面的BindingResult类型的参数之间不能有其他参数。
  8.      */
  9.     @ RequestMapping ( method = RequestMethod . POST )
  10.     public   String create ( @ Valid @ ModelAttribute ( " account " ) Account account , BindingResult result ) {
  11.         if   ( result . hasErrors ()) {
  12.             return   " account/createForm " ;
  13.         }
  14.         // ...
  15.         return   " redirect:/account/ " + account . getId () ;
  16.     }
  17.  
  18. }

另外还有一个view文件、配置文件等等,具体的可以查看Spring MVC Basic Sample

OK,接下来说重点。我参考上面的Spring MVC Basic Sample中的做法也做了一个类似的表单,在表单中的balance中输入非数字的时候旁边的错误信息会出现下面的异常信息:

Failed to convert property value of type java.lang.String to required type java.math.BigDecimal for property balance; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value “eff” from type java.lang.String to type java.math.BigDecimal; nested exception is java.lang.IllegalArgumentException: Unable to parse eff

这个就很郁闷了,明显是格式转换出错,但是列出来一堆的异常信息,对用户来说非常不友好。于是开始在Google中搜索也没有找到比较好的说法,后 来运行了Spring MVC Basic Sample,不显示上面的异常信息,而只是显示一句话:”could not be parsed“,这个效果正是我们所期待的。于是我将例子中的所有spring配置文件、Bean信息、Controller都做了对比,甚至JSP模板 都一样,但是一到我自己的项目中就会出现那个异常,当时非常郁闷。

后来无意中在Google中查到到了参考资料中的一篇帖子,里面提到只要在messages.properties文件中设置 typeMismatch属性就可以了,于是我猛然想到Spring MVC Basic Sample中也有个messages.properties文件,打开之后赫然看到果然有一条typeMismatch属性:

  1. typeMismatch=could not be parsed

原来是在这里设置的,真的很郁闷。还好,参考资料中的帖子中还提到可以设置具体的类型,比如可以这样设置:

  1. ## 全局的配置信息
  2. typeMismatch=输入的数据格式不正确
  3. ## 针对BigDecimal类型的错误信息
  4. typeMismatch.java.math.BigDecimal=请输入数字
  5. ## 针对Date类型的错误信息
  6. typeMismatch.java.util.Date=请在{0}中输入正确的日期

参考资料:
Spring MVC Data Binding and user-friendly error messages

 

这里谢谢上面作者分享,以下是个人根据上面文章做的实际操作:

解决操作:

1.在WEB-INF下新建messages.properties

里面添加:

  1. ## 全局的配置信息
  2. typeMismatch=输入的数据格式不正确
  3. ## 针对BigDecimal类型的错误信息
  4. typeMismatch.java.math.BigDecimal=请输入数字
  5. ## 针对Date类型的错误信息
  6. typeMismatch.java.util.Date=请在{0}中输入正确的日期

2.在springmvc-servlet.xml文件里面添加:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="/WEB-INF/messages"  />
        <property name="cacheSeconds" value="0" />
    </bean>


大功告成!重新部署你项目看看

分享到:
评论

相关推荐

    最全最经典spring-mvc教程

    错误处理和异常处理也是Spring MVC中的重要部分,通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 最后,测试是任何应用程序开发的重要环节。Spring MVC提供了MockMVC,可以在不...

    Spring Mvc(1)Spring MVC 校验

    本文将详细介绍 Spring MVC 中的数据校验机制。 1. **基本校验** Spring MVC 支持 JSR-303/JSR-349 规范,即 Bean Validation,这是一个标准的 Java EE 数据校验框架。通过在字段上添加注解,如 `@NotNull`、`@...

    spring mvc 4.0

    6. **数据绑定与验证**:Spring MVC提供了数据绑定和验证功能,允许将表单数据自动绑定到Java对象,并进行校验,简化了业务逻辑处理。 7. **视图解析**:Spring MVC 4.0支持多种视图技术,如JSP、FreeMarker、...

    spring-mvc-官方中文文档

    11. **验证**:Spring MVC 集成了 Bean Validation API,允许开发者对模型数据进行校验,通过 @Valid 注解和 ConstraintValidator 实现自定义验证规则。 12. **消息转换**:Spring MVC 提供了 HttpMessageConverter...

    最简单的用户登录与注册系统 spring mvc spring jdbc

    这个项目是一个基于Spring MVC和Spring JDBC的简单用户管理应用,旨在帮助初学者理解如何在实际开发中实现用户登录、注册以及信息修改功能。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring ...

    spring mvc

    7. **Form Handling**: Spring MVC 提供了强大的表单处理能力,包括自动数据绑定、数据校验等功能。通过@Valid可以进行数据验证,@RequestParam和@PathVariable用于获取请求参数。 8. **Interceptors**: 拦截器是...

    Spring MVC数据校验.docx

    当请求被Controller处理时,如果数据不符合校验规则,Spring MVC会自动抛出异常,可以在全局异常处理器中捕获并返回错误信息给用户。 总结来说,Spring MVC通过DispatcherServlet、Controller、HandlerMapping、...

    spring mvc 参数绑定漏洞

    1. **类型转换异常**:当用户提交的数据不符合预期的数据类型时,Spring MVC会尝试进行类型转换。如果转换失败,可能会抛出异常,暴露敏感信息或导致应用逻辑错误。 2. **未校验输入**:如果没有对用户输入进行适当...

    spring MVC文档

    这篇文档详细地介绍了Spring MVC的功能、工作原理以及如何将其有效地应用于实际项目中。Spring MVC的设计目标是提供一种简洁、可测试且灵活的方式来处理HTTP请求,并将这些请求映射到业务逻辑上,然后将结果呈现给...

    spring MVC_快速入门

    要使用Spring MVC,首先需要在项目中引入Spring MVC的依赖,并配置Spring的DispatcherServlet,它是Spring MVC的前端控制器,负责调度请求到相应的处理器。 3. **Controller** Controller是处理请求的组件,通常...

    大三(二)springmvc数据校验.zip

    在本资料包 "大三(二)springmvc数据校验.zip" 中,我们主要探讨的是 Spring MVC 中的数据校验机制。 在 Spring MVC 中,数据校验是非常重要的一环,它确保了从客户端提交到服务器的数据是准确无误的。数据校验...

    Spring MVC 基础实例源码01

    在Spring MVC中,Model代表业务对象,View负责展示,Controller处理用户请求并协调Model和View。 2. **DispatcherServlet**:Spring MVC的入口点,它是一个前端控制器,接收所有HTTP请求,并根据配置的...

    spring、 spring mvc、 mybatis 开发的java客户关系管理系统,前端采用easyui编写.zip

    5. 系统架构:在这款CRM系统中,通常会采用三层架构设计,即表现层(前端)、业务逻辑层(Spring MVC控制器和Service)和数据访问层(MyBatis)。表现层负责展示信息和接收用户输入,业务逻辑层处理业务规则和数据...

    Spring MVC学习框架

    10. **异常处理**:Spring MVC 提供了统一的异常处理机制,通过 @ExceptionHandler 或配置 ExceptionResolver,可以优雅地处理应用中的异常。 11. **RESTful 支持**:Spring MVC 通过 @RequestMapping 注解支持 ...

    24 Spring Core vs Spring MVC参数校验慕课专栏1

    本节主要讨论了Spring Core和Spring MVC中的参数校验,以及它们如何利用Bean Validation标准和Hibernate Validator进行数据验证。 Bean Validation是Java平台上的一个规范,它定义了数据验证的元数据模型和API。这...

    spring mvc校验

    这篇博文"spring mvc校验"可能深入探讨了如何在Spring MVC项目中实现有效的数据验证。 首先,我们来了解一下Spring MVC中的数据校验机制。Spring MVC集成了JSR 303/349(Bean Validation)标准,允许开发者通过注解...

    spring MVC基础学习

    在Spring MVC中,开发者可以利用模型-视图-控制器(MVC)架构模式来分离业务逻辑、数据处理和用户界面。下面我们将深入探讨Spring MVC的基础知识。 1. **核心组件**: - DispatcherServlet:作为Spring MVC的前端...

    精通Spring MVC4 电子版_springmuv_

    在Spring MVC中,模型由业务对象组成,视图负责展示数据,而控制器处理用户请求并协调模型和视图。这一分离使得开发人员可以独立地修改各个组件,提高了代码的可维护性和可测试性。下面将详细讨论Spring MVC的关键...

    springmvc01.zip_DEMO_JSON校验_spring mvc

    如果校验失败,Spring MVC会自动将错误信息放入BindingResult对象中,你可以进一步处理这些错误信息并返回给客户端。 **2. 文件上传** 在Spring MVC中,文件上传通常通过`MultipartFile`接口实现。你需要在表单中...

Global site tag (gtag.js) - Google Analytics