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

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

格式化输出jsonspring

 方法一、(适用spring3.x和4.x的版本)数据库

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

  就能够将json的日期格式化。须要导入的json的相关jar包  mybatis

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

<!-- 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包依赖  app

 

  优缺点:maven

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

    也就一行代码的事情,惟一很差的是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

相关文章
相关标签/搜索