1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【SSM - SpringMVC篇】06 - SpringMVC转换器 日期格式转换器 后台Date转json 前台json转Date

【SSM - SpringMVC篇】06 - SpringMVC转换器 日期格式转换器 后台Date转json 前台json转Date

时间:2023-12-08 09:54:53

相关推荐

【SSM - SpringMVC篇】06 - SpringMVC转换器 日期格式转换器 后台Date转json 前台json转Date

文章目录

1. SpringMVC字符串向日期Date格式转换1.1 通过注解`@DateTimeFormat()`实现日期格式转换。1.2 编写自定义转换器实现`Converter`,通过重写方法进行类型转换。[全局使用]1.2.1 编写自定义转换器实现`Converter`接口1.2.2 springmvc.xml中配置转换工厂,将转换器设置到converters集合中,并将转换器放入注解驱动中注意事项【***】 2. SpringMVC日期格式化标签,date向指定格式转换(在jsp中使用)2.1 需要jstl依赖2.2 在jsp页面导入标签2.3 调用日期格式化标签`fmt`标签(是导入你设置的前缀)2.4 后台就在日期上加`@DateTimeFormat(pattern = "yyyy-MM-dd")`注解就行

1. SpringMVC字符串向日期Date格式转换

springMVC默认不支持页面上的日期字符串(类似-10-14和/10/14之类的)到后台的Date的转换。(会报400错误)

比如jsp页面设置一个接收date数据的input。

<% pageContext.setAttribute("path",request.getContextPath()); %><form action="${path}/testDate.do" method="get">请选择日期:<input type="date" name="date"><br/><input type="submit" value="提交"/></form>

后台controller接收数据进行跳转

@RequestMapping(path="/testDate.do",method = RequestMethod.GET)//该参数接收浏览器提交的日期字符public String testDate(Date date, Model model){System.out.println("testDate date="+date);model.addAttribute("date",date);return "stringToDateConverter";}

运行结果400错误

有两种方式实现转换:1. 配置日期转换注解 2. 配置全局日期转换器。

1.1 通过注解@DateTimeFormat()实现日期格式转换。

注解日期类型转换器(在需要进行日期格式转换的Date属性上添加注解):@DateTimeFormat("需要转换的格式")

如果一个类中有很多个Date属性,那么不推荐使用这种方式,毕竟注解需要在每个Date上写,需要写很多。

出生日期<input type="date" name="birthday"/><br/>

public User{private int id;private String username;private double password;//注解将yyyy-MM-dd的形式转换为Date数据,具体什么格式要看传入参数格式,就是发送请求,查看请求参数的表单数据,看birthday数据的格式@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;}

查看请求头,发现传入的日期格式为

yyyy-MM-dd格式,具体是怎么样的看请求信息就行。

1.2 编写自定义转换器实现Converter,通过重写方法进行类型转换。[全局使用]

如果有很多的Date属性,建议使用这种方式

1.2.1 编写自定义转换器实现Converter接口

import org.springframework.core.convert.converter.Converter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/*自定义类型参数转换器: 将字符串日期格式转成Date类型的数据.Converter<S,T> S: 代表的是源,将要转换的数据类型 T:目标类型,将会转成什么数据类型*///日期格式转换器public class DateFormatConverter implements Converter<String,Date>{//转换方法//String source 将会传递过来的日期的字符串public Date convert(String source) {//参数填写为你想要转换的数据格式​ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");​ try {​Date date = sdf.parse(source);​return date;​ } catch (ParseException e) {​e.printStackTrace();​ }​ return null;}

1.2.2 springmvc.xml中配置转换工厂,将转换器设置到converters集合中,并将转换器放入注解驱动中

<!-- 1. 配置类型转换器 --><!-- 创建类型转换器对象 id可以随便取,class是你的转换器类路径 --><bean id="stringToDateConverter" class="com.xgf.converter.StringToDateConverter"/><!-- 把转换器对象放入SpringMVC转换器工厂中 --><bean id="conversionServiceFactory" class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><set><!-- 引入日期转换器对象(上面创建的) --><ref bean="stringToDateConverter"/><!-- 或者直接将转换器类写到这里面 --><!--<bean id="stringToDateConverter" class="com.xgf.converter.StringToDateConverter"/>--></set></property></bean><!--2. 把转换器工厂放入到注解驱动,转换器才会生效 --><mvc:annotation-driven conversion-service="conversionServiceFactory" />

运行结果(转换成功)

注意事项【***】

上述代码中的<mvc:annotation-driven conversion-service="conversionServiceFactory" />一定要放到springmvc的注解驱动<mvc:annotation-driven/>后面,不然就会报400错误。(你都没有开启注解驱动,怎么放进去呢?)

Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Date’;

Failed to convert from type [java.lang.String] to type [java.util.Date] for value ‘-10-01’

2. SpringMVC日期格式化标签,date向指定格式转换(在jsp中使用)

2.1 需要jstl依赖

<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency>

2.2 在jsp页面导入标签

<%@ taglib uri="/jsp/jstl/fmt" prefix="fmt"%>

2.3 调用日期格式化标签fmt标签(是导入你设置的前缀)

<fmt:formatDate value="${User.birthday}" pattern="yyyy-MM-dd-"/>

这样你传入后端的日期数据格式就是yyyy-MM-dd格式了

2.4 后台就在日期上加@DateTimeFormat(pattern = "yyyy-MM-dd")注解就行

//这个pattern需要和你传入的数据格式一致@DateTimeFormat(pattern = "yyyy-MM-dd")private Date date;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。