fastjson V1.2.44 @JSONField的format时间格式化配置会被全局配置覆盖

huus2vyu  于 2021-11-27  发布在  Java
关注(0)|答案(6)|浏览(444)

@JSONField的format时间格式化配置会被全局配置覆盖

@JSONField(format="yyyy-MM-dd HH:mm:ss")
private Date date;

xml中

<mvc:annotation-driven conversion-service="conversionService">
        <mvc:message-converters register-defaults="true">        
	    <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes" value="application/json;charset=UTF-8" />
                <property name="fastJsonConfig">
                    <bean
                        class="com.alibaba.fastjson.support.config.FastJsonConfig">
                        <property name="serializerFeatures">
                            <array>
                                <value>WriteMapNullValue</value>
                                <value>WriteDateUseDateFormat</value>
                                <value>DisableCircularReferenceDetect
                                </value>
                                <value>IgnoreNonFieldGetter</value>
                            </array>
                        </property>
                        <property name="dateFormat" value="yyyy-MM-dd" /><!--会覆盖@JSONField的format yyyy-MM-dd HH:mm:ss-->
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

跟踪源码发现在转换javabean的时候FieldSerializer会调用到JSONSerializer的writeWithFormat
在com.alibaba.fastjson.serializer.JSONSerializer中

public final void writeWithFormat(Object object, String format) {
        if (object instanceof Date) {
            DateFormat dateFormat = this.getDateFormat();
            if (dateFormat == null) {
                dateFormat = new SimpleDateFormat(format, locale);
                dateFormat.setTimeZone(timeZone);
            }
            String text = dateFormat.format((Date) object);
            out.writeString(text);
            return;
        }

全局配置覆盖了传入的format,使@JSONField配置无效
请问本身就是这样设计的还是有bug

628mspwn

628mspwn1#

@wenshao 温总 这个能不能搞定一下啊。这个真的 很坑

iqih9akk

iqih9akk2#

你说的很对,这个属于遗留问题。
但是如果改成以jsonfield为准,对之前的代码有影响。

puruo6ea

puruo6ea3#

同样问题,至今没解决.还有标准注解@transient也不生效

bvhaajcl

bvhaajcl4#

不知这个遗留问题何时可以解决?能否设计成默认选取全局配置,当配置@JSONField 的时候,用@JSONField配置项? @kimmking

3z6pesqy

3z6pesqy5#

和Springmvc混用时 jsonfield 会被全局覆盖怎么办呢 是不是bug @kimmking

kpbwa7wx

kpbwa7wx6#

最后的结论是什么?同问

相关问题