您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“fastjson全局日期序列化設(shè)置導(dǎo)致JSONField失效如何解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“fastjson全局日期序列化設(shè)置導(dǎo)致JSONField失效如何解決”吧!
fastjson通過代碼指定全局序列化返回時(shí)間格式,導(dǎo)致使用JSONField注解標(biāo)注屬性的特殊日期返回格式失效
應(yīng)用名稱 | 版本 |
---|---|
springboot | 2.0.0.RELEASE |
fastjson | 1.2.83 |
public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { //1.需要定義一個(gè)convert轉(zhuǎn)換消息的對象; FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //2.添加fastJson的配置信息,比如:是否要格式化返回的json數(shù)據(jù); FastJsonConfig fastJsonConfig = new FastJsonConfig(); //全局指定了日期格式 fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); //3處理中文亂碼問題 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //4.在convert中添加配置信息. fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); //5.將convert添加到converters當(dāng)中. converters.add(fastJsonHttpMessageConverter); } }
@JSONField(format = "yyyy-MM-dd") private Date addDate;
請求接口后addDate字段返回的格式為2022-12-17 13:26:45,仍然為全局日期格式,并不設(shè)置JSONField后期望的2022-12-17格式
系統(tǒng)啟動時(shí)掃描對應(yīng)基類的子類,通過反射獲取標(biāo)注了JSONField注解的字段并獲取對應(yīng)的format值
public class FastJsonUtil { private static HashMap<String, String> dateMap = new HashMap(); public static void scanDate2Json(Class runtimeClass, List<String> extraPackageNameList) { List<Class> filterClassList = new ArrayList<>(); filterClassList.add(BaseSystemObject.class); List<Class<?>> scanClassList = new ArrayList<>(); if (!runtimeClass.getPackage().getName().equals(Application.class.getPackage().getName())) { scanClassList.addAll(ScanUtil.getAllClassByPackageName(runtimeClass.getPackage(), filterClassList)); } for (String packageName : extraPackageNameList) { scanClassList.addAll(ScanUtil.getAllClassByPackageName(packageName, filterClassList)); } for (Class clazz : scanClassList) { List<Field> fs = Arrays.asList(clazz.getDeclaredFields()); for (Field field : fs) { field.setAccessible(true); if (field.getType() == Date.class) { JSONField jsonField = field.getAnnotation(JSONField.class); if (jsonField != null && !StringUtil.isEmpty(jsonField.format())) { dateMap.put(clazz.getName() + "|" + field.getName(), jsonField.format()); } } } } } public static boolean checkDate2Json(String key){ return dateMap.containsKey(key); } public static String getDate2JsonFormat(String key){ return dateMap.get(key); } }
實(shí)現(xiàn)fastjson的擴(kuò)展過濾器ValueFilter進(jìn)行序列化后的值修改,并注冊到配置中去
public class FastJsonPropertyValueFilter implements ValueFilter { @Override public Object process(Object source, String name, Object value) { String key = source.getClass().getName() + "|" + name; if (value != null && FastJsonUtil.checkDate2Json(key)) { String format = FastJsonUtil.getDate2JsonFormat(key); DateFormat df = new SimpleDateFormat(format); return df.format(value); } return value; } }
public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { //1.需要定義一個(gè)convert轉(zhuǎn)換消息的對象; FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); //2.添加fastJson的配置信息,比如:是否要格式化返回的json數(shù)據(jù); FastJsonConfig fastJsonConfig = new FastJsonConfig(); //全局指定了日期格式 fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); //指定json返回規(guī)則 fastJsonConfig.setSerializeFilters(new FastJsonPropertyValueFilter()); //3處理中文亂碼問題 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); //4.在convert中添加配置信息. fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); //5.將convert添加到converters當(dāng)中. converters.add(fastJsonHttpMessageConverter); } }
到此,相信大家對“fastjson全局日期序列化設(shè)置導(dǎo)致JSONField失效如何解決”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。