java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > 使用@JsonDeserialize和@JsonSerialize注解

@JsonDeserialize和@JsonSerialize注解的使用方式

作者:华妃

这篇文章主要介绍了@JsonDeserialize和@JsonSerialize注解的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

JsonDeserialize注解介绍

@JsonDeserialize

使用场景

使用示例

假如前端页面中选择多条数据,会向后端传递选中的数据对象集合,但是后端期望存储选中的多个数据id用逗号分隔,此时可以用反序列注解。

1、自定义反序列化的方式

public class CheckedStringDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        final List<Map<String, String>> list = p.getCodec().readValue(p, new TypeReference<List<Map<String, String>>>() {
        });
        if (CollUtil.isNotEmpty(list)) {
            final ArrayList<String> objects = new ArrayList<>(list.size());
            list.forEach(e -> objects.add(e.get("id")));
            return CollUtil.join(objects, ",");
        }
        return "";
    }
}

2、后端接收参数的dto如下图所示,其中临时党支部人员Id接收的是String类型,增加了该反序列化注解。

3、前端传递参数如下图所示:

4、后端实际接收到的参数如图所示:

@JsonSerialize注解

@JsonSerialize

使用场景

后端返回前端的参数与前端期望的参数不一致时,可以用个序列化注解处理。(比如数据脱敏、数据格式处理等)

使用示例

假如后端存储附件、图片或者其他文件时,只存了文件key,此时前端反显需要将数据放在list中回显。

1、自定义序列化处理方式

public class FileUploadSeserializer extends JsonSerializer<String> {

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        //将string转为List<Map<String,String>>格式
        Map<String,String> map = new HashMap<>(2);
        List<Map<String,String>> list = new ArrayList<>(1);
        map.put("key", value);
        map.put("name",value);
        list.add(map);
        gen.writeObject(list);
    }
}

2、返回前端的vo对象如下图所示,其中其中模板背景期望为附件的Key和name对象集合,在该字段上增加了文件上传序列化注解。

3、此时返回前端的数据格式为

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文