• SpringMVC处理Date类型的成员变量方法


    原文链接:http://www.tuicool.com/articles/aYfaqa

         在使用 SpringMVC 的时候,我们可能需要将一个对象从 View 传递给 Controller 。而当这个 Object的成员变量只是一些简单的String , int 或者 boolean 类型时,SpringMVC 能自动将 View 层的 JSON 包含的 String 类型转换为 Object 成员变量相应的类型。但是当这个Object包含的成员变量的类型是“Date 类型(或者其他复杂类型)”的的时候, SpringMVC 在将 String转换成 Date 类型时,就会出错,报异常。但是我们又需要使用 Date 类型的时候,其实 Spring 给我们提供了简单的操作方式可以完成这个任务的。

    【总结】

    首先,总结一下整个过程,其实就 3 步:
    1、在 Date 类型的属性上加入 @DateTimeFormat 注解
    2、加入 joda 相关的包
    3、在 SpringMVC 配置文件中加入 <mvc:annotation-driven />

         SpringMVC 提供了一个注解 @DateTimeFormat 。可以将 View 传过来的 String类型转换为 Date 类型。具体使用方式很简单,直接在成员变量上加入注解就可以了,同时还可以指定 format 的格式,如下所示:

     1 public class Person {
     5   //直接在date类型上加入注解,同时指定格式样式
     7   @DateTimeFormat( pattern = "yyyy-MM-dd" )
     8   private Date birthday;
    10 
    11   //省略setter And Getter
    13 }

     至此,不要以为完事大吉了,你还需要完成以下两个步骤才可以。

    第一需要加入 joda 的 jar 包。因为在 @DateTimeFormat 注解中使用到了 joda 包中的相关东西,所以缺少这个包也是会报异常的。如果使用的直接导入 jar 包的话,去下载 joda-Jar 导入即可,如果使用的是 Maven 管理项目的 jar ,那么在配置文件文件中加入依赖:

    1 <dependency>
    2 
    3     <groupId>joda-time</groupId>
    4 
    5     <artifactId>joda-time</artifactId>
    6 
    7     <version>2.3</version>
    8 
    9 </dependency>

    第二需要在 SpringMVC 配置 xml 文件中(一般是 dispatchServlet.xml 文件)中加入配置: <mvc:annotation-driven /> 。这一句配置是一种简写,其实是给 Spring 容器中注入了两个 Bena ,分别是: DefaultAnnotationHandlerMapping 和AnnotationMethodHandlerAdapter 。 @DateTimeFormat 注解的内部同样需要使用到前面注入的两个 bean 去处理,所以缺少这个配置, Spring 容器中没有对应的 bean 去处理注解同样也会报错。至此,所有的步骤都完成了,可以跑了。

    接下来我们跑跑测试一下,测试过程:

    首先需要一个表单 :

    1 <form action="test" method="post">
    2 
    3     <input type="text" name="name">
    4 
    5     <input type="text" name="birthday">
    6 
    7     <input type="submit" name="提交">
    8 
    9 </form>

    用一个 Controller 接收:

     1 @RequestMapping( "/test" )
     2 
     3 public ModelAndView test(HttpServletRequest request,
     4 
     5      @ModelAttribute Person person) {
     6 
     7   ModelAndView view = new ModelAndView();
     8 
     9   System.out.println(person.toString());
    10 
    11   view.setViewName("/test/data");
    12 
    13   return view;
    14 
    15 }
  • 相关阅读:
    Android之BroadcastReceiver1
    contentprovider提供程序间共享数据的统一接口
    Android之访问下载文件
    Android之SQLite
    Android之Handler
    sql server异地备份数据库
    Android常用控件
    Android学习笔记02
    Android学习笔记01
    java多线程的使用2
  • 原文地址:https://www.cnblogs.com/zjrodger/p/4955570.html
Copyright © 2020-2023  润新知