使用JsonField配置日期格式,被FastJsonConfig的全局配置覆盖掉

wbrvyc0a  于 2022-11-05  发布在  其他
关注(0)|答案(7)|浏览(199)

1、继承WebMvcConfigurerAdapter后,配置了全局的时间转换格式

@Override
	public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
		FastJsonConfig fastJsonConfig = new FastJsonConfig();
		fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
		fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
		FastJsonHttpMessageConverter4 jsonConverter = new FastJsonHttpMessageConverter4();
		jsonConverter.setFastJsonConfig(fastJsonConfig);
		converters.add(0, jsonConverter);
		super.extendMessageConverters(converters);
	}

2、使用JSONField指定dto转换时间格式

public class RptMtcTimeOrderCountDTO {
	@JSONField(format = "yyyy-MM-dd")
	private Date statDate;
}

3、最后的转换结果,时间格式为yyyy-MM-dd HH:mm:ss,并不是jsonField的yyyy-MM-dd格式。

4、debug后得到问题在于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是否被配置了时间格式,再判断全局时间格式。

rkue9o1l

rkue9o1l2#

@zxk175 感觉这样有点取巧

d7v8vwbk

d7v8vwbk3#

@zxk175 这样操作,全局的配置无法生效,直接给返回long类型。还要每个去配置,贼麻烦。

7eumitmz

7eumitmz4#

我也遇到这个问题了。format值传进去了,但是写死了,优先使用全局设置的dateFormat。很蛋疼。

rqenqsqc

rqenqsqc5#

这个问题应该改吧,正常来说都是从小到大生效的配置

crcmnpdw

crcmnpdw6#

这样可以解决

默认就是这个内容 不过spring mvc貌似无效,还是long返回。须每个时间都加@JsonField了,

cnh2zyt3

cnh2zyt37#

问题解决了吗,感觉很久了啊,现在版本还是有

相关问题