Fasterxml Jackson自动将非布尔值转换为布尔值

2023-11-30

我有一个 pojo 类,其中标志之一isControl这是布尔类型。

当此属性获得除以下以外的非布尔值时true or falsefastxml jackson 自动将输入值转换为true。经过几个小时的调试后我发现这是在setter方法中发生的setIsControl.

如果此属性的输入值是非布尔值,我想传递自定义消息。我编写了自己的注释来验证此属性的输入值,如果它不是布尔值,则返回自定义消息,但 Jackson 在检查我的自定义验证器之前绑定了该值。

使用杰克逊版本>>>2.6.3。任何帮助将不胜感激。

控制.java

    @JsonProperty(required = true)
    @NotNull(message = "isControl cannot be null")
    private Boolean isControl;

    public Boolean getIsControl() {
            return isControl;
    }


    @CheckBoolean(fieldName = "isControl")
    public void setIsControl(Boolean isControl) {
            this.isControl = isControl;
    }

public class BooleanValidator implements ConstraintValidator<CheckBoolean,  Boolean> {

    private String fieldName;

    @Override
    public void initialize(CheckBoolean constraintAnnotation) {
        this.fieldName = constraintAnnotation.fieldName();
    }

    @Override
    public boolean isValid(Boolean value, ConstraintValidatorContext context) {         
        context.disableDefaultConstraintViolation();
        context.buildConstraintViolationWithTemplate(
                String.format("The control flag %s should be either true or false", fieldName))
                .addConstraintViolation();

        if (value != null) {
            boolean isBoolean;
            if (value instanceof Boolean) {                 
                isBoolean = ((Boolean)value).booleanValue();
                System.out.println("var isBoolean: " +isBoolean);
                return true;
            } else if (value instanceof Boolean && Boolean.FALSE.equals(value)) {
                isBoolean = ((Boolean)value).booleanValue();                    
                return true;
            } else {
                return false;
            }           
        }
return false;
}
}

例外:


有两种方法可以做到这一点,假设您将布尔字段映射为哈迪回答的对象类型 -

1.自定义setter方法 -

    public class DTO {
    String key1;
    Object booleanKey;

    public Object getBooleanKey() {
        return booleanKey;
    }

    public void setBooleanKey(Object booleanKey) {
        if (booleanKey instanceof Boolean) {
            this.booleanKey = booleanKey;
        } else {
            // custom code here
        }

    }

    public String getKey1() {
        return key1;
    }

    public void setKey1(String key1) {
        this.key1 = key1;
    }
    }

2. 编写自定义解串器 -

class BooleanKeyDeserializer extends JsonDeserializer<Object> {

@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
    Object object = p.readValueAs(Object.class);
    if (!(object instanceof Boolean)) {
        // custom code here
    }
    return object;
}
}

注释您要执行自定义反序列化的字段 -

class DTO {
String key1;
@JsonDeserialize(using = BooleanKeyDeserializer.class)
Object booleanKey;
//setters getters
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fasterxml Jackson自动将非布尔值转换为布尔值 的相关文章

随机推荐

  • AngularJs如何调用prettyprint?

    我正在尝试为我的 angularjs 应用程序使用 Prettyprint 插件 但无法使其发挥作用 我创建一个简单的指令并调用方法 PrettyPrint 但代码未格式化 FIDDLE http jsfiddle net Tropical
  • 使用相对 URL 时如何使用 HTTP 传输状态

    我正在尝试实现内置TransferHttpCache模块为了消除重复的请求 我在我的应用程序中使用这个拦截器 intercept req HttpRequest
  • R - 基于重复行条件的子集列

    我有一个数据框 其中包含重复的 id 列和站点计数 我想知道如何仅在 Site Count 记录大于 0 时删除重复的 ID 记录 生成DF DF lt data frame ID sample 100 300 100 replace T
  • 迭代 ruby​​ 中的哈希数组

    所以如果我有一个像这样的哈希数组 ruby初学者 input last name gt Gay first name gt Rudy display name gt Rudy Gay position gt SF minutes gt 39
  • Json数组详细信息在带有ionic的AngularJS中显示在三页中

    我有类别数组 还有更多产品 我需要在类别页面中显示类别 当单击某个类别时 我必须重定向产品页面并显示必要的产品 单击产品时 我必须重定向产品详细信息页面并显示必要的产品详细信息 类别加载到类别页面 点击时会重定向到产品页面 但是 我看不到产
  • Firestore 文档 get() 性能

    刚刚开始探索 Firestore 存储 要做的第一件事 通过文档密钥读取我的 Android 应用程序中的一个简单的小文档 经过 Google 验证 但这可能并不重要 这是一个片段 public void readDoc final Str
  • bash 出现意外标记然后出现错误

    我编写了一个 bash 脚本 当我测试变量是否为空的条件时收到错误 下面是一个示例脚本 我没有提到为变量 a 和 fne 赋值而执行的命令 但是 bin bash for f in path do a some command output
  • C++异常处理运行时是如何实现的?

    我对 C 异常处理机制的工作原理很感兴趣 具体来说 异常对象存储在哪里以及它如何在多个范围中传播直到被捕获 它存储在某个全球区域吗 由于这可能是特定于编译器的 有人可以在 g 编译器套件的上下文中解释一下吗 实现可能有所不同 但有一些根据需
  • python 中 selenium 的 useAutomationExtension 等价物是什么?

    I am trying to run a basic selenium script from my office environment which has a proxy and firewall setup The script is
  • 带有 MongoDB 的 WSO2 DAS

    是否可以将 MongoDB 设置为 WSO2 DAS 中的分析数据源 我在analytics datasources xml脚本中看到DAS支持cassandra HBase 我们已经做了一个 PR 在 DAS 中支持 MongoDB 它已
  • 将 C 函数返回的 C 指针释放给 Fortran?

    我有一个在 C 中返回 char 指针的函数 如下所示 char string val ARGS char svalue cJSON GetObjectItem nml var name gt valuestring return sval
  • 通过 180 度翻转滚动列表反转滚动方向

    我正在构建一个离子 角度应用程序 并且我想在滚动输入上反转滚动方向 在这里你可以找到我的情况的一个例子 jsfiddle 示例 在上面的示例中 我将滚动列表翻转了 180 度 并将滚动列表内的 div 翻转了 180 度 我这样做是为了使消
  • Netbeans 和 Rails 错误:bin/ruby:没有这样的文件或目录 -- script/rails (LoadError)

    当我创建项目后尝试在 netbeans 7 4 上启动 Rails 控制台时 我得到 home mati rvm rubies ruby 2 1 0 bin ruby No such file or directory script rai
  • 如何在视图中显示变量值?

    这里我试图显示变量y值在td在视图中 即 cshtml 但不知道该怎么做 以下是我的看法 td Html DisplayFor modelItem gt item District td td var y v GetContestantAv
  • RCurl getURL SSL 错误

    相关问题 获取 ssl 端点时出现 RCurl 错误 R 在 Rcurl getURL 语句中指定 SSL 版本 我正在看以下内容 url https www veilingbiljet nl resultaten ajax asp ord
  • 如何像flutter中选中的chips一样获取未选中(unselected)的chips?

    我使用Map功能构建了多选芯片 当选择一个芯片时 颜色会变成黄色 当选定芯片后 然后打印选定的芯片 就像这样 我想选择芯片并显示其中取消选择的芯片 能做到吗 如果可以如何实施 code List
  • 在没有 MSBuild 或插件的情况下在 Visual Studio 中顺序构建配置?

    MSDN描述如何创建批量构建 但没有提供自动化不同批次的方法 以及 GUI 的一键解决方案 这个问题描述有条件地调用第二个构建 但似乎不足以满足两个以上的顺序配置 这个问题解决相同的情况 但同样仅适用于两种配置 在我的测试用例中 每个配置
  • '\K' 在此正则表达式中意味着什么?

    鉴于以下 shell 脚本 是否有人能解释一下grep Po正则表达式好吗 bin bash Issue the request for a bearer token json is returned raw json curl s X P
  • ruby mysql2 gem安装问题[关闭]

    Closed 这个问题是无关 目前不接受答案 你好 我必须为我的 ruby 应用程序安装 mysql2 gem 但是当我尝试使用 gem install mysql2 安装 mysql2 gem 时 它显示错误 为类客户端封闭类 模块 mM
  • Fasterxml Jackson自动将非布尔值转换为布尔值

    我有一个 pojo 类 其中标志之一isControl这是布尔类型 当此属性获得除以下以外的非布尔值时true or falsefastxml jackson 自动将输入值转换为true 经过几个小时的调试后我发现这是在setter方法中发