spring mvc日期转换(前端到后端,后端到前端)

本文介绍如何在SpringMVC中处理日期类型的转换,包括从前端到后端的日期字符串转换及从后端到前端的日期格式化。文章还提供了自定义日期转换器的方法,并展示了如何配置全局日期转换。

在做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或者以下的版本):

[html]  view plain  copy
 
 print?
    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.youkuaiyun.com/kylinah/article/details/53101068 感谢作者

转载于:https://www.cnblogs.com/panxuejun/p/7279997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值