我有一个带有 JSON 属性的 Boolean 对象,在反序列化期间只需要允许 truefalse
truefalse 的任何不同值都应该抛出异常。

我怎样才能做到这一点?

例如。:

有效的 json:

{
  "id":1,
  "isValid":true
}


无效的 json:
{
  "id":1,
  "isValid":1
}

更新

我尝试了@Michał Ziober 的建议,效果很好。

当我正在实现一个 Spring 应用程序(使用 Webflux)时,我只需要以不同的方式进行配置。我在这里发布我所做的:
  • 创建从 DelegatingWebFluxConfiguration
  • 扩展的配置类
  • 覆盖 configureHttpMessageCodecs 方法,在 ObjectMapper
  • 上设置属性

    @Configuration
    public class JacksonConfig extends DelegatingWebFluxConfiguration {
    
        @Override
        protected void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS);
            objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    
            configurer.defaultCodecs()
                    .jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper));
        }
    }
    

    最佳答案

    您需要禁用 ALLOW_COERCION_OF_SCALARS 功能:

    import com.fasterxml.jackson.databind.MapperFeature;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    import java.io.File;
    
    public class JsonApp {
    
        public static void main(String[] args) throws Exception {
            File jsonFile = new File("./resource/test.json").getAbsoluteFile();
    
            ObjectMapper mapper = new ObjectMapper();
            mapper.disable(MapperFeature.ALLOW_COERCION_OF_SCALARS);
    
            System.out.println(mapper.readValue(jsonFile, Pojo.class));
        }
    }
    
    class Pojo {
    
        private int id;
        private Boolean isValid;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public Boolean getIsValid() {
            return isValid;
        }
    
        public void setIsValid(Boolean valid) {
            isValid = valid;
        }
    
        @Override
        public String toString() {
            return "Pojo{" +
                    "id=" + id +
                    ", isValid=" + isValid +
                    '}';
        }
    }
    

    上面的代码打印:

    关于java - Jackson:有没有办法忽略 boolean 反序列化的 0/1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57778322/

    10-11 19:26
    查看更多