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 感谢作者

  • 相关阅读:
    干将莫邪
    Rancher
    Rancher 1.6 版本 只能在 linux 下用
    野蛮人大作战
    Oracle
    Gradle
    正则表达式 我遇到的
    Redis
    NestJS 用TypeScript开发 nodeJS后端
    Koa2
  • 原文地址:https://www.cnblogs.com/panxuejun/p/7279997.html
Copyright © 2011-2022 走看看