栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将派生的属性添加到Jackson 2序列化类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将派生的属性添加到Jackson 2序列化类?

这是我的方法。

解决方案是为字段getter 指定一个定制的JsonSerializer实现。

首先,我改变了混入

interface
class
扩展实体(目标)类,所以它可以访问目标类的数据。

public class ProductApi extends Product {    @JsonProperty    @Override    public String getName() {        return super.getName();    };    // ...}

接下来,我实现了

JsonSerializer
,它将创建我想要的派生属性:

public static class ImagesSerializer extends JsonSerializer<String> {    @Override    public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {        Product p = (Product) jgen.getCurrentValue();        int num = p.getNumberOfImages();        List<String> imgs = new ArrayList<String>(num);        for(int i = 0; i < num; i++) { String src = "/include/images/showImage.jsp?"+"id="+p.getId()+"&number="+i; imgs.add(src);        }        provider.defaultSerializevalue(imgs, jgen);    }}

这是一个非常简单的实现,应该进行更多的安全检查。

基本上,这是从JSON生成器检索整个实体实例,构建一个自定义对象,然后要求Jackson对其进行序列化。
我在我内部

ProductApi
将其实现为静态类,但只是为了简单起见。

最后,序列化器需要绑定到带

JsonProperty
注释的字段:

public class ProductApi extends Product {    @JsonProperty    @Override    public String getName() {        return super.getName();    };    // ...    @JsonSerialize(using=ImagesSerializer.class)    @JsonProperty("images")    @Override    public String getImage() { // in my entity this returns an image number, whereas in my JSON I want a list of URLs        return "";    }    // ...}

作为附带说明,似乎

getImage()
未使用该方法的返回值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464392.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号