欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

FastJson序列化自定义返回字段,普通类从spring容器中获取bean

程序员文章站 2023-03-08 19:10:53
FastJson序列化自定义返回字段,普通类从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);
    }

}