在做web开发的时候,页面传入的都是String类型,SpringMVC可以对一些基本的类型进行转换,但是对于日期类的转换可能就需要我们配置。

1、如果查询类使我们自己写,那么在属性前面加上@DateTimeFormat(pattern = "yyyy-MM-dd")  ,即可将String转换为Date类型,如下

1
2
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date createTime;

2、如果我们只负责web层的开发,就需要在controller中加入数据绑定:

1
2
3
4
5
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); //true:允许输入空值,false:不能为空值

3、可以在系统中加入一个全局类型转换器

实现转换器

1
2
3
4
5
6
7
8
9
10
11
12
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String source) {
 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 dateFormat.setLenient(false);
 try {
  return dateFormat.parse(source);
 } catch (ParseException e) {
  e.printStackTrace();
 }  
 return null;
}

进行配置:

1
2
3
4
5
6
7
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  <property name="converters">
   <list>
    <bean class="com.doje.XXX.web.DateConverter" />
   </list>
  </property>
</bean>
1
<mvc:annotation-driven conversion-service="conversionService" />

4、如果将日期类型转换为String在页面上显示,需要配合一些前端的技巧进行处理。

5、SpringMVC使用@ResponseBody返回json时,日期格式默认显示为时间戳。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Component("customObjectMapper")
public class CustomObjectMapper extends ObjectMapper {
  
 public CustomObjectMapper() {
  CustomSerializerFactory factory = new CustomSerializerFactory();
  factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {
   @Override
   public void serialize(Date value, JsonGenerator jsonGenerator,
     SerializerProvider provider) throws IOException, JsonProcessingException {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    jsonGenerator.writeString(sdf.format(value));
   }
  });
  this.setSerializerFactory(factory);
 }
}

配置如下:

1
2
3
4
5
6
7
<mvc:annotation-driven>
 <mvc:message-converters>
  <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
   <property name="objectMapper" ref="customObjectMapper"></property>
  </bean>
 </mvc:message-converters>
</mvc:annotation-driven>

6、date类型转换为json字符串时,返回的是long time值,如果需要返回指定的日期的类型的get方法上写上@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") ,即可将json返回的对象为指定的类型。

1
2
3
4
5
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
public Date getCreateTime() {
return this.createTime;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

通过注解来协助SpringMVC处理日期在前后端的传递问题

从前端向后端传递日期:

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

前台向后台传递字符串类型的日期参数时,需要通过此注解将字符串解析成日期类型,其中日期格式可以根据需要进行设置。

例子:如果后台接收的createDate为Java.util.Date类型,但前台传递过来的是2016-05-23,那么此时我们需要使用@DateTimeFormat注解来修饰createDate字段,否则SpringMVC认为传递过来的是字符串与日期类型不匹配而报400错误(HTTP Status 400 The request sent by the client was syntactically incorrect)。

从后端向前端传递日期:

@JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")

SpringMVC向前端返回json格式的数据时,日期类型默认返回时间戳,那么我们可以通过此注解将时间返回为固定格式的字符串。
使用此注解需要引入一下jar包(需要特别注意的是jackson最新的版本对此功能不兼容,因此建议选择2.6.1或者以下的版本):

    1. <dependency>
    2. <groupId>org.codehaus.jackson</groupId>
    3. <artifactId>jackson-mapper-asl</artifactId>
    4. <version>1.9.13</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.fasterxml.jackson.core</groupId>
    8. <artifactId>jackson-core</artifactId>
    9. <version>2.6.1</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>com.fasterxml.jackson.core</groupId>
    13. <artifactId>jackson-databind</artifactId>
    14. <version>2.6.1</version>
    15. </dependency>

本文转自http://blog.csdn.net/kylinah/article/details/53101068 感谢作者

spring mvc日期转换(前端到后端,后端到前端)的更多相关文章

  1. Spring MVC对象转换说明

    在Spring MVC之前我们需要在Servlet里处理HttpServletRequest参数对象,但这个对象里的属性都是通用类型的对象(如字符串),处理起来很繁琐并且容易出错,而Spring MV ...

  2. spring boot日期转换

    spring boot 作为微服务简易架构.拥有其自身的特点.快速搭建架构 简单 快捷.这里我只是简单的介绍下我遇到的其中的  两个问题.第一前台页面传递的时间类型 无法自动映射到Java的 Date ...

  3. Spring mvc 时间转换

    http://www.cnblogs.com/ssslinppp/p/4600043.html

  4. Spring MVC前后端的数据传输

    本篇文章主要介绍了Spring MVC中如何在前后端传输数据. 后端 ➡ 前端 在Spring MVC中这主要通过Model将数据从后端传送到前端,一般的写法为: @RequestMapping(va ...

  5. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  6. 基于Vue+Spring MVC+MyBatis+Shiro+Dubbo开发的分布式后台管理系统

    本文项目代码: 服务端:https://github.com/lining90567/dubbo-demo-server 前端:https://github.com/lining90567/dubbo ...

  7. SSM(spring mvc+spring+mybatis)学习路径——2-1、spring MVC入门

    目录 2-1 Spring MVC起步 一.回顾Servlet 二.SpringMVC简介 三.搭建SpringMVC第一个案例 四.简单流程及配置 五.使用注解开发Controller 六.参数绑定 ...

  8. spring + spring mvc + tomcat 面试题(史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...

  9. Java之Spring mvc详解

    文章大纲 一.Spring mvc介绍二.Spring mvc代码实战三.项目源码下载四.参考文章   一.Spring mvc介绍 1. 什么是springmvc   springmvc是sprin ...

随机推荐

  1. MySQL故障处理一例_Another MySQL daemon already running with the same unix socket

    MySQL故障处理一例:"Another MySQL daemon already running with the same unix socket". [root@test- ...

  2. Spring MVC过滤器-HiddenHttpMethodFilter

    参考来源:http://blog.csdn.net/geloin/article/details/7444321 浏览器form表单只支持GET与POST请求,而DELETE.PUT等method并不 ...

  3. 375 Guess Number Higher or Lower II 猜数字大小 II

    我们正在玩一个猜数游戏,游戏规则如下:我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字.每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了.然而,当你猜了数字 x 并且猜错了的时候,你需 ...

  4. php函数的声明与使用

    function 函数名(){ 函数体 } 一个函数是由3部分组成:声明(function 关键字).函数名(用来找到函数体的).函数体(封装的代码) 2.函数的优越性 代码重用性强.维护方便.提高开 ...

  5. sql剪切数据

    实际项目当中用到的案例,个人笔记. USE [CA-SM]GO/****** Object:  StoredProcedure [dbo].[PG_SM_AddSum]    Script Date: ...

  6. poj2367 Genealogical tree

    思路: 拓扑排序,这里是用染色的dfs实现的.在有环的情况下可以判断出来,没有环的情况下输出拓扑排序序列. 实现: #include <vector> #include <cstri ...

  7. HanLP自然语言处理包开源(包含源码)

    支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换, ...

  8. Application crashes -程序崩溃原因

    Typical errors that result in application crashes include: attempting to read or write memory that i ...

  9. Discuz!伪静态原理分析

    伪静态在seo火热的时代,是每个站长都比较关注的问题,discuz!论坛如何伪静态,为什么伪静态失效了,为什么列表页无法实现伪静态,为什么有些页面不是伪静态呢?下面dz官方nxy105从两个角度入手为 ...

  10. eclipse 新建 maven 项目 + 消除错误

    安装eclips以及maven自行去了解,这里不讲解 一.新建一个 maven 项目. 二.下一步选择项目架构 三.填写相关信息 group id: 一般都是 com点 项目名 aftriact.id ...