后台date类型转换为json字符串时,返回前台页面的是long time值问题解决


https://blog.csdn.net/zhanglf02/article/details/77770118


问题页面回顾:

这里写图片描述

本例环境和框架:maven工程+ssm框架+jdk1.7+tomcat7.0
解决方案:
解决方案分为两种:
第一种:如果bo(实体类)对应的字段(日期)类型为Date类型,用Jackson的注解@JsonFormat。
第二种:如果bo(实体类)对应的字段(日期)类型为String类型,则在set方法上用字符串截取方式。
下面具体来说。

1.用Jackson的注解@JsonFormat

1.1 引入jackson的jar包

一个非常重要的点就是jackson的依赖引入。我一开始就用的注解,就是jar包没引入完整导致不成功!需要的jar包是:jackson-core.jar,jackson-databind.jar,jackson-annotations.jar,下面是pom.xml中引入的jackson依赖:

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

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.8</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.8</version>
        </dependency>

  • 这时整个项目用到的所有jackson有关的jar包:

这里写图片描述
1.2 在查询映射对应的实体类(bo)对应变量或者该变量的get方法上加上注解@JsonFormat

import java.util.Date;

import com.fasterxml.jackson.annotation.JsonFormat;

public class JiJinBo {

    private Date jiJinTime;

    //设置时区为上海时区,时间格式自己据需求定。
    @JsonFormat(pattern="yyyy-MM-dd",timezone = "GMT+8")
    public Date getJiJinTime() {
        return jiJinTime;
    }

    public void setJiJinTime(Date jiJinTime) {
        this.jiJinTime = jiJinTime;
    }

完成以上两步就可以了。在页面可以现实正常的时间格式:
这里写图片描述

2.在set方法上用字符串截取方式

2.1 关于jackson依赖

这里就不用引入上面说的依赖。对应的pom.xml引入依赖仅留下这一个:

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

对应的jar包如下:

这里写图片描述

2.2 在查询映射对应的实体类(bo)对应变量或者该变量的set方法上截取字符串为yyyy-MM-dd类型。

import java.util.Date;

public class JiJinBo {

    private String jiJinTime;

    public String getJiJinTime() {
        return jiJinTime;
    }

    public void setJiJinTime(String jiJinTime) {
        this.jiJinTime = jiJinTime.substring(0,10);
    }

完成这两步也就可以实现同样正常日期格式的页面效果。

3.总结

本次问题解决的关键是理解为什么要在get方法上加注解就能解决日期现实问题和在set方法上加上字符串截取就可以实现同样的效果?

1.实体类bo的get,set方法除了我们主动调用来为其赋值取值或者改变值外,实际我们每次从数据库查询出结果,返回到前台页面都会隐形用到这些方法。
我们按条件查询时,查询条件我们主动调用set方法封装到bo中,等查询出结果后,框架会主动调用set方法,把查询出来的key-value形式的值赋值给对应映射的实体bo的属性上。当返回页面现实每个bo信息时,框架会主动调用bo的get方法去取值。
所以,我们会在get方法上加上jackson注解,让日期格式经处理后在返回到页面。我们在set方法上会先处理查询出来的数据,然后赋值给bo.

2.关于数据库字段为日期类型时,我们对应的bo其实有两个选择。用Date类型或者String类型都是可以的。实际数据库中我们自己写sql时,为日期类型赋值不也是 jijintime) values(‘2017-03-29’)这种字符串形式嘛。所以不一定用Date。两外注意,一定不能在bo中用timestamp来作为属性的类型。这个忘了为啥了,反正不支持。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值