FastJson序列化自定义返回字段,普通类从spring容器中获取bean
程序员文章站
2022-05-08 18:18:56
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); } }