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

使用jackson和spring-boot将base64编码的JSON解码为POJO

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

使用jackson和spring-boot将base64编码的JSON解码为POJO

我已经做了一些实验,这是一个简单的Jackson Deserializer,应该可以为您工作。

Deserializer实现ContextualDeserializer接口以访问实际的bean属性(例如

varB
)。这是检测正确结果类型的必要条件,因为解串器本身可以附加到任何类型的字段。

import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.*;import com.fasterxml.jackson.databind.deser.ContextualDeserializer;import com.fasterxml.jackson.databind.exc.InvalidFormatException;import java.io.IOException;import java.util.base64;public class base64Deserializer extends JsonDeserializer<Object> implements ContextualDeserializer {    private Class<?> resultClass;    @Override    public JsonDeserializer<?> createContextual(DeserializationContext context, BeanProperty property) throws JsonMappingException {        this.resultClass = property.getType().getRawClass();        return this;    }    @Override    public Object deserialize(JsonParser parser, DeserializationContext context) throws IOException, JsonProcessingException {        String value = parser.getValueAsString();        base64.Deprer deprer = base64.getDeprer();        try { ObjectMapper objectMapper = new ObjectMapper(); byte[] depredValue = deprer.depre(value); return objectMapper.readValue(depredValue, this.resultClass);        } catch (IllegalArgumentException | JsonParseException e) { String fieldName = parser.getParsingContext().getCurrentName(); Class<?> wrapperClass = parser.getParsingContext().getCurrentValue().getClass(); throw new InvalidFormatException(     parser,     String.format("Value for '%s' is not a base64 enpred JSON", fieldName),     value,     wrapperClass );        }    }}

这是一个映射类的例子。

public class MyRequest {    private String varA;    @JsonDeserialize(using = base64Deserializer.class)    private B varB;    public String getVarA() {        return varA;    }    public void setVarA(String varA) {        this.varA = varA;    }    public B getVarB() {        return varB;    }    public void setVarB(B varB) {        this.varB = varB;    }}


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

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

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