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

  

   

 

原文地址:https://www.cnblogs.com/leilong/p/8970777.html