Java 使用对象映射器对无效字段进行反序列化忽略

Java 使用对象映射器对无效字段进行反序列化忽略,java,objectmapper,Java,Objectmapper,我不是一个Java程序员,但很想知道如何实现一个在反序列化时忽略一个或多个无效字段的功能。在我的例子中,byte[]是由遗留系统发送的,因此无法控制数据更正(在编码端或在丢失时发送默认值)。这意味着,我需要预测字节[]中的无效数据/缺失数据 下面的代码序列化有效负载,但在接收无效(错误编码、null等)时引发异常 公共类序列化程序实现反序列化程序{ 私有最终ObjectMapper ObjectMapper; 私有最终类myType; 公共序列化程序(最终ObjectMapper ObjectM

我不是一个Java程序员,但很想知道如何实现一个在反序列化时忽略一个或多个无效字段的功能。在我的例子中,
byte[]
是由遗留系统发送的,因此无法控制数据更正(在编码端或在丢失时发送默认值)。这意味着,我需要预测
字节[]
中的无效数据/缺失数据

下面的代码序列化有效负载,但在接收无效(错误编码、null等)时引发异常

公共类序列化程序实现反序列化程序{
私有最终ObjectMapper ObjectMapper;
私有最终类myType;
公共序列化程序(最终ObjectMapper ObjectMapper,最终类myType){
this.objectMapper=objectMapper;
this.myType=myType;
}
公共序列化程序(最终类myType){
这(新的ObjectMapper(),myType);
}
@凌驾
公共T反序列化(最终字符串sometext,最终字节[]字节){
如果(字节==null){
返回null;
}
试一试{
返回objectMapper.readValue(字节,myType);
}捕获(最终IOE例外){
抛出新的序列化异常(e);
}
}
}
问题:在我的例子中,我可以在序列化时安全地忽略无效值。但是,我不知道如何指示序列化程序忽略无效字段(无论其类型如何)。这样即使构造的对象不完整,序列化程序也会发出对象

注意:
ObjectMapper
是我在这里用来支持序列化的类型。但是,我可以自由使用任何可以替代使用的帮助器类型
ObjectMapper
。这里唯一关心的是如何忽略无效字段(无论其类型如何)


请告知

您的案例中哪些字段无效?如果类中的字段未知,则可能是一个解决方案。@Tobias,例如:负载有字符串数据。但存储时,该字符串数据的编码不正确。这意味着,当我收到格式如此糟糕的字符串时,我的反序列化程序在报告“反序列化时发现无效字符”时抛出异常。在您的情况下,哪些是无效字段?如果类中的字段未知,则可能是一个解决方案。@Tobias,例如:负载有字符串数据。但存储时,该字符串数据的编码不正确。这意味着,当我收到格式如此糟糕的字符串时,我的反序列化程序在报告“反序列化时发现无效字符”时抛出异常。
   public class LDeserializer<T> implements Deserializer<T> {

    private final ObjectMapper objectMapper;
    private final Class<T> myType;

    public LDeserializer(final ObjectMapper objectMapper, final Class<T> myType) {
        this.objectMapper = objectMapper;
        this.myType = myType;
      }

    public LDeserializer(final Class<T> myType) {
        this(new ObjectMapper(), myType);
    }

    @Override
    public T deserialize(final String sometext, final byte[] bytes) {
        if (bytes == null) {
            return null;
        }

        try {
            return objectMapper.readValue(bytes, myType);
        } catch (final IOException e) {
            throw new SerializationException(e);
        }
    }
}