@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
6条答案
按热度按时间628mspwn1#
@wenshao 温总 这个能不能搞定一下啊。这个真的 很坑
iqih9akk2#
你说的很对,这个属于遗留问题。
但是如果改成以jsonfield为准,对之前的代码有影响。
puruo6ea3#
同样问题,至今没解决.还有标准注解@transient也不生效
bvhaajcl4#
不知这个遗留问题何时可以解决?能否设计成默认选取全局配置,当配置@JSONField 的时候,用@JSONField配置项? @kimmking
3z6pesqy5#
和Springmvc混用时 jsonfield 会被全局覆盖怎么办呢 是不是bug @kimmking
kpbwa7wx6#
最后的结论是什么?同问