zoukankan      html  css  js  c++  java
  • spring mvc日期转换(前端到后端,后端到前端)

    在做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.csdn.net/kylinah/article/details/53101068 感谢作者

  • 相关阅读:
    django页面分类和继承
    django前端从数据库获取请求参数
    pycharm配置django工程
    django 应用各个py文件代码
    CF. 1428G2. Lucky Numbers(背包DP 二进制优化 贪心)
    HDU. 6566. The Hanged Man(树形背包DP DFS序 重链剖分)
    小米邀请赛 决赛. B. Rikka with Maximum Segment Sum(分治 决策单调性)
    区间树 学习笔记
    CF GYM. 102861M. Machine Gun(主席树)
    2016-2017 ACM-ICPC East Central North America Regional Contest (ECNA 2016) (B, D, G, H)
  • 原文地址:https://www.cnblogs.com/panxuejun/p/7279997.html
Copyright © 2011-2022 走看看