fastjson 日期类型格式化优先级问题

r6hnlfcb  于 2021-11-27  发布在  Java
关注(0)|答案(14)|浏览(254)

在Spring MVC中使用FastJsonHttpMessageConverter,设置默认的日期格式化格式yyyy-MM-dd HH:mm,那么当在Controller中返回实体类的时候日期字段上标注了@JSONField(format = "yyyy-MM-dd"),但是这个注解不生效,转化后的json字符串日期格式仍然是yyyy-MM-dd HH:mm格式。应该是细粒度的指定日期格式优先级比较高,望回复,谢谢!

6yjfywim

6yjfywim2#

开始是1.2.9版本,后来更换到了1.2.12还是有这个问题,看到这么一篇博客FastJsonHttpMessageConverter设置dateFormat后导致JSONField注解format失效解决办法,说了他分析的原因

zynd9foi

zynd9foi3#

这个问题应该是已经修正了啊,你确定1.2.12还存在这样的问题?

dzhpxtsq

dzhpxtsq4#

刚才我又重新确认并测试了一下,1.2.12版本确实还存在这个问题。只要是FastJsonHttpMessageConverter配置了dateFormat,那么@JSONField(format = "yyyy-MM-dd")就失效了,如果不配置dateFormat,@JSONField(format = "yyyy-MM-dd")是生效的

k5hmc34c

k5hmc34c5#

这个是修复了,我这边测试正常,只有在Android版本下才有问题

juzqafwq

juzqafwq6#

我重新写了一个的demo,问题依然存在

0、spring mvc配置文件配置:

1、返回实体bean

2、控制器

3、浏览器查看到的结果:

如果把Spring mvc的配置文件配置改成这样(去掉dateFormat配置)

那么得到的结果是正常的(也就是@JSONField中format配置是生效的)

刚才看到发新版了,我又使用1.2.13测试了一下,没有改变。

如果方便的话能提供一个测试正常的demo吗,多谢!

z0qdvdin

z0qdvdin7#

最新版本也存在这个问题。

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.23</version>
</dependency>
ckx4rj1h

ckx4rj1h8#

这个问题解决了吗,我也出现这个问题了。

5sxhfpxr

5sxhfpxr9#

1.2.44这个问题依然存在

ykejflvf

ykejflvf12#

1.2.51还在,
这里逻辑不合理
public class JSONSerializer extends SerializeFilterable {
...
public final void writeWithFormat(Object object, String format) {
if (object instanceof Date) {
DateFormat dateFormat = this.getDateFormat();
//如果设置了DateFormat,不会进入if
if (dateFormat == null) {
dateFormat = new SimpleDateFormat(format, locale);
dateFormat.setTimeZone(timeZone);
}
String text = dateFormat.format((Date) object);
out.writeString(text);
return;
}
.......
}

k3bvogb1

k3bvogb113#

1.2.58 仍然存在

d7v8vwbk

d7v8vwbk14#

居然是2016年的问题,还会修复吗? @wenshao

相关问题