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

在使用 SpringMVC 的时候,我们可能需要将一个对象从 View 传递给 Controller 。而当这个 Object 只是一些简单的 String , int 或者 boolean 类型的成员变量时,SpringMVC 能自动将 View 层的 JSON 包含的 String 类型转换为 Object 成员变量相应的类型。但是当这个 Object 包 Date 类型的成员变量的时候, SpringMVC 在将 String转换成 Date 类型时,就会出错,报异常。但是我们又需要使用 Date 类型的时候,其实 Spring 给我们提供了简单的操作方式可以完成这个任务的。
SpringMVC 提供了一个注解 @DateTimeFormat 。可以将 View 传过来的 String类型转换为 Date 类型。具体使用方式很简单,直接在成员变量上加入注解就可以了,同时还可以指定 format 的格式,如下所示:

public class Person {

  private String name;

  //直接在date类型上加入注解,同时指定格式样式

  @DateTimeFormat( pattern = "yyyy-MM-dd" )

  private Date birthday;

  //setterAndGetter

}

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

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

<dependency>

    <groupId>joda-time</groupId>

    <artifactId>joda-time</artifactId>

    <version>2.3</version>

</dependency>

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

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

首先需要一个表单 :

<form action="test" method="post">

    <input type="text" name="name">

    <input type="text" name="birthday">

    <input type="submit" name="提交">

</form>

用一个 Controller 接收:

@RequestMapping( "/test" )

public ModelAndView test(HttpServletRequest request,

     @ModelAttribute Person person) {

  ModelAndView view = new ModelAndView();

  System.out.println(person.toString());

  view.setViewName("/test/data");

  return view;

}

好了,总结一下整个过程,其实就 3 步:

1 、 在 Date 类型的属性上加入 @DateTimeFormat 注解

2、 加入 joda 相关的包

3、 在 SpringMVC 配置文件中加入

Spring MVC提供了一个类型转换的接口,称为ConversionService。该接口允许在不同的Java类型之间进行转换。它可以用于将字符串转换为Java对象,以及在方法参数绑定和Bean配置中使用。 ConversionService接口的主要特点是它使用TypeDescriptor来描述需要转换的类的信息,并且还描述了宿主类的上下文信息。转换的类将以成员变量的方式出现在宿主类中。这种类型转换逻辑可以利用这些信息进行灵活的控制。 以下是一个使用ConversionService的示例: ```java import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.support.DefaultConversionService; public class ConversionExample { public static void main(String[] args) { ConversionService conversionService = new DefaultConversionService(); // 将字符串转换为整数 String numberString = "123"; Integer number = conversionService.convert(numberString, Integer.class); System.out.println("Converted number: " + number); // 输出:Converted number: 123 // 将字符串转换为日期 String dateString = "2021-01-01"; TypeDescriptor stringType = TypeDescriptor.valueOf(String.class); TypeDescriptor dateType = TypeDescriptor.valueOf(java.util.Date.class); java.util.Date date = (java.util.Date) conversionService.convert(dateString, stringType, dateType); System.out.println("Converted date: " + date); // 输出:Converted date: Fri Jan 01 00:00:00 GMT 2021 } } ``` 在上面的示例中,我们首先创建了一个DefaultConversionService对象作为ConversionService的实例。然后,我们使用convert()方法将字符串转换为整数和日期。对于日期的转换,我们使用TypeDescriptor来描述字符串和日期的类型信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值