说明
springboot 使用 Jackson 实现序列化和反序列化
对于 非 JavaBean ,在序列化时,需要指定序列化器,才能达到想要的效果
通过@JsonComponent(推荐)
在 @JsonComponent 注解所修饰的类里面添加继承 JsonSerializer 的内部类,spring就会自动帮助我们将定义的序列化类注册到jackson里去。
这个过程使用的仍然是Spring Boot自动配置web mvc,这样静态资源不会失效。推荐使用这种方式实现全局JSON序列化。
@JsonComponent注解 value 用来指定注册到Spring容器里的Bean Name,type 用来指定对哪些类进行了序列化或反序列化处理。scope指定对在作用范围。
Record 类
该类封装了一些数据:
class Record{
Map<String,Object> data = new HashMap();
public Record(){
data.put("name","李雷");
data.put("age",20);
}
}
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.jackson.JsonComponent;
import top.malaoshi.jdbc.Record;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
// 对 Record 类进行序列化处理
@JsonComponent(type = Record.class )
public class RecordSerializer {
public static class CurrCodeJsonSerializer extends JsonSerializer<Record> {
@Override
public void serialize(Record record, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
// 对 Record 对象进行序列化时,将 Record 的内部数据取出,并放入到 map 中
Map map = new HashMap();
for(String column : record.columns) {
map.put(column,record.getValue(column));
}
jsonGenerator.writeObject(map);
}
}
}
感谢:
https://blog.csdn.net/NestorBian/article/details/103227896