• SpringMVC 返回json的日期格式的问题的解决方法


    springMVC中josn的日期类型输出默认是时间戳,需要进行日期格式转换。

    格式化输出json

     方法1、(适用spring3.x和4.x的版本)

      在实体类的getter方法上面添加@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

      就可以将json的日期格式化。需要导入的json的相关jar包  

      @JsonFromat存在于jackson-annotations-2.1.0.jar中。
      Maven项目需要添加的依赖:    

    <!-- json数据 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.core.version}</version>
    </dependency>
    
    <properties>
        <jackson.core.version>2.4.2</jackson.core.version>
    </properties>

    在IDEA中查看maven的jar包依赖  

      优缺点:

        优点是简单方便,缺点是需要在每个需要的属性的getter方法上面添加。宏观的看比较繁琐,但实际开发中

        也就一行代码的事情,唯一不好的是mybatis自动生成实体类会覆盖。

     方法2(在spring3.x版本中测试可用)

      在上面的方法中虽然简单方便,但缺点也很明显,自动生成代码会覆盖实体类,而且每个日期属性都要手动添加,

      实际中日期属性又是普遍必备。因此,大可全局处理,统一格式。这里需要说下,在数据库中的date和timestamp

      都会被mybatis转换成date对象。至于生日精确到日、时间精确到到秒的格式规范可以让显示层做处理。

      统一成yyyy-MM-dd HH:mm:ss。

      MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册

      一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。

      第一步:编写子类继承ObjectMapper  

    package cn.ll.ssm.controller.converter;
    
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import org.codehaus.jackson.JsonGenerator;
    import org.codehaus.jackson.map.JsonSerializer;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.map.SerializerProvider;
    import org.codehaus.jackson.map.ser.CustomSerializerFactory;
    
    /**      
    * 项目名称:springmvc_02_ssm   
    * 类名称:CustomJsonDateConverter   
    * 类描述:解决Date类型返回json格式为自定义格式
    * 创建人:LL   
    * 创建时间:2018年4月29日 上午11:13:08      
    * @version       
    */
    public class CustomJsonDateConverter extends ObjectMapper {
        public CustomJsonDateConverter(){
            CustomSerializerFactory factory = new CustomSerializerFactory();
            factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){
              @Override
              public void serialize(Date value,
                         JsonGenerator jsonGenerator,
                         SerializerProvider provider)
                  throws IOException {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                jsonGenerator.writeString(sdf.format(value));
              }
            });
            this.setSerializerFactory(factory);
          }
    }

    第二步:在SpringMVC.xml中进行配置  

    <mvc:annotation-driven conversion-service="conversionService" validator="validator">
             <mvc:message-converters>
              <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                <property name="objectMapper" ref="customObjectMapper"></property>
              </bean>
            </mvc:message-converters>
         </mvc:annotation-driven>
        
        <bean id="customObjectMapper" class="cn.ll.ssm.controller.converter.CustomJsonDateConverter"></bean>

    第三步:

      这个配置无法和上一个@JsonFormat共同使用。由于全局统一了日期格式,date和datetime以及timestamp都是

    一个格式,如果生日等date字段需要精简,只能在显示层裁剪。

    参考:http://www.jb51.net/article/103032.htm

      

       

     

  • 相关阅读:
    hive基本操作与应用
    理解MapReduce计算构架
    熟悉HBase基本操作
    熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    Hadoop综合大作业
  • 原文地址:https://www.cnblogs.com/leilong/p/8970777.html
Copyright © 2020-2023  润新知