zoukankan      html  css  js  c++  java
  • spingmvc 返回json数据日期格式化方法

    第一种: 

        json 用的是这个依赖

    <!-- JSON lib 开发包 以及它的依赖包 -->
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.6.0</version>
    </dependency>

    在springmvc返回json数据的时候默认日期字段显示的是long类型的时间戳

    如果想要返回格式化的日期如:yyyy-MM-dd这种格式的需要进行出现

    方法如下:

    单独写一个处理类继承JsonSerializer

    code
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import com.fasterxml.jackson.core.JsonGenerator;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.JsonSerializer;
    import com.fasterxml.jackson.databind.SerializerProvider;
     
     
    public class CustomDateSerializer extends 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));
        }
    }

    在实体类的属性字段上添加@JsonSerialize注解

    code
    1
    2
    @JsonSerialize(using = CustomDateSerializer.class)
    private Date createTime;

    第二种:

        这个包支持情况下

    <dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
    </dependency>

    一、SpringMVC使用@ResponseBody时返回json的日期格式

         前提了解: @ResponseBody 返回json字符串的核心类是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter,它使用了Jackson 这个开源的第三方类库。主要是以下两个jar包:jackson-core-asl-1.6.4.jar;jackson-mapper-asl-1.6.4.jar。

        出现问题: 使用@ResponseBody时返回json字符串的日期格式。Date类型属性默认返回一个Long型的时间戳,怎样能够返回自定义的日期格式?

        解决方案:目前有两种方式实现,

                 1、局部修改(网上较多,但不推荐);

              继承Jackson的抽象类:JsonSerializer<T>,然后在javabean的属性getter()上添加注解@JsonSerialize即可实现。

             代码如下:

    Java代码  收藏代码
    1. import java.io.IOException;  
    2. import java.text.SimpleDateFormat;  
    3. import java.util.Date;  
    4.   
    5. import org.codehaus.jackson.JsonGenerator;  
    6. import org.codehaus.jackson.JsonProcessingException;  
    7. import org.codehaus.jackson.map.JsonSerializer;  
    8. import org.codehaus.jackson.map.SerializerProvider;  
    9.   
    10. /** 
    11.  * @description 自定义返回JSON 数据格中日期格式化处理 
    12.  * @author aokunsang 
    13.  * @date 2013-5-28 
    14.  */  
    15. public class CustomDateSerializer extends JsonSerializer<Date> {  
    16.   
    17.     @Override  
    18.     public void serialize(Date value,   
    19.             JsonGenerator jsonGenerator,   
    20.             SerializerProvider provider)  
    21.             throws IOException, JsonProcessingException {  
    22.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    23.         jsonGenerator.writeString(sdf.format(value));  
    24.     }  
    25. }  

        使用方式:

        

    Java代码  收藏代码
    1. @JsonSerialize(using = CustomDateSerializer.class)  
    2. public Date getCreateDate() {  
    3.     return createDate;  
    4. }  

                 2、全局修改(强烈推荐):

             MappingJacksonHttpMessageConverter主要通过ObjectMapper来实现返回json字符串。这里我们继承该类,注册一个JsonSerializer<T>。然后在配置文件中注入自定义的ObjectMapper。

            代码如下:

    Java代码  收藏代码
    1. import java.io.IOException;  
    2. import java.text.SimpleDateFormat;  
    3. import java.util.Date;  
    4.   
    5. import org.codehaus.jackson.JsonGenerator;  
    6. import org.codehaus.jackson.JsonProcessingException;  
    7. import org.codehaus.jackson.map.JsonSerializer;  
    8. import org.codehaus.jackson.map.ObjectMapper;  
    9. import org.codehaus.jackson.map.SerializerProvider;  
    10. import org.codehaus.jackson.map.ser.CustomSerializerFactory;  
    11.   
    12. /** 
    13.  * @description 解决Date类型返回json格式为自定义格式 
    14.  * @author aokunsang 
    15.  * @date 2013-5-28 
    16.  */  
    17. public class CustomObjectMapper extends ObjectMapper {  
    18.   
    19.     public CustomObjectMapper(){  
    20.         CustomSerializerFactory factory = new CustomSerializerFactory();  
    21.         factory.addGenericMapping(Date.class, new JsonSerializer<Date>(){  
    22.             @Override  
    23.             public void serialize(Date value,   
    24.                     JsonGenerator jsonGenerator,   
    25.                     SerializerProvider provider)  
    26.                     throws IOException, JsonProcessingException {  
    27.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
    28.                 jsonGenerator.writeString(sdf.format(value));  
    29.             }  
    30.         });  
    31.         this.setSerializerFactory(factory);  
    32.     }  
    33. }  

       spring-servlet.xml中配置:

    Java代码  收藏代码
    1. <mvc:annotation-driven>  
    2.         <mvc:message-converters>  
    3.             <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
    4.                 <property name="objectMapper" ref="customObjectMapper"></property>  
    5.             </bean>  
    6.         </mvc:message-converters>  
    7.     </mvc:annotation-driven>  
    8.     <bean id="customObjectMapper" class="com.pmc.dwa.common.custom.CustomObjectMapper"></bean>  

     二、@DatetimeFormat使用注意

         1、 使用@DatetimeFormat很简单,这里需要注意的是:使用时要引入一个类库joda-time-1.3.jar,否则会无法访问相应路径(400错误)。 

    ps:该注解可以作用在METHOD,FIELD以及PARAMETER级别上。

    使用介绍参考:http://www.captaindebug.com/2011/08/using-spring-3-datetimeformat.html#.UaR3mWWZk0k

       2、因为springMVC没有提供默认的日期转换器,前段页面传递过来日期字符串怎么转换为日期类型,如果没有提供全局日期转换器或者数据绑定的基础上,可以使用@DatetimeFormat注解完成。

  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/yhtboke/p/5653895.html
Copyright © 2011-2022 走看看