最新java設計模式精講Debug方式+記憶體分析
阿新 • • 發佈:2018-12-21
前言: 資料庫的欄位比如:price:1 ,返回需要price:1元。 這時兩種途徑修改: ① 比如sql中修改或者是在實體類轉json前遍歷修改。 ②返回json,序列化時候修改。用到的是fastjson。要求fastjson版本1.2.15以上(本章介紹) 操作: 首先pom修改依賴 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency> 這裡我要返回的圖片路徑 在返回時候欄位前面拼接一個 /files
@JSONField(serializeUsing = JSONFieldViewPathSerializerUtil.class) private String idcardImages;
JSONFieldViewPathSerializerUtil 是此欄位序列化要用的類
public class JSONFieldViewPathSerializerUtil implements ObjectSerializer { static StorageProperties storageProperties; @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) { // 這裡從spring中獲取bean 為了取 "/files" ,可以忽略不看 if (null == storageProperties) { storageProperties = SpringUtil.getBean(StorageProperties.class); } //主要看這裡 if (StringUtils.isNotBlank(object.toString())) { String value = object.toString(); //拼接 "/files" value = storageProperties.getRequestLocation() + value; serializer.write(newValue); } else { serializer.write(String.valueOf(object)); } } }
注意事項:
1、String序列化時候 如果是null 會在返回的時候變成 " "空字串,判斷時候需要注意
2、在要序列化的字串是空 " " 也要 執行方法:serializer.write(String.valueOf(object));
否則返回的json 是“ idcardImages: ,” 注意格式是錯誤的
擴充套件:SpringUtil從容器中獲取bean
/** * @Auther liran * @Date 2018/8/30 14:49 * @Description */ import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if(SpringUtil.applicationContext == null) { SpringUtil.applicationContext = applicationContext; } System.out.println("========ApplicationContext配置成功,在普通類可以通過呼叫SpringUtils.getAppContext()獲取applicationContext物件,applicationContext="+SpringUtil.applicationContext+"========"); } //獲取applicationContext public static ApplicationContext getApplicationContext() { return applicationContext; } //通過name獲取 Bean. public static Object getBean(String name){ return getApplicationContext().getBean(name); } //通過class獲取Bean. public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } //通過name,以及Clazz返回指定的Bean public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } }