FastJson序列化Json自定義返回字段,普通類從spring容器中獲取bean


前言:  
 數據庫的字段比如: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);
    }

}

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM