【问题标题】:How to provide default value as "true" to a boolean field jackson property如何为布尔字段杰克逊属性提供默认值为“true”
【发布时间】:2020-06-28 17:52:47
【问题描述】:

我正在使用 jackson api @JsonProperty 注释来创建模型,我需要将默认值作为 true 赋予布尔属性(默认情况下为 false)。 @JsonPropertydefaultValue 属性只接受字符串。任何人都可以建议我如何为布尔模型属性提供默认值作为 true

我试过下面的方法,但是不行

@JsonProperty(value = "field1", required = false)
@ApiObjectField(name = "field1", description = "field1")
private boolean field1 = true;
//getters and setters

【问题讨论】:

    标签: java jackson jackson-databind


    【解决方案1】:

    下面的代码应该可以工作

    @JsonProperty(value = "required")
    private boolean required = true;
    

    【讨论】:

      【解决方案2】:

      创建一个带有 @JsonCreator 注释的构造函数,该构造函数接收您要设置到对象的所有 json 属性,并将默认值设置为具有空值的任何输入字段。

      @JsonCreator
      MyObject(@JsonProperty("field1") Boolean field1) {
         this.field1 = field1 == null ? true : field1;
      
      }
      

      免责声明:我没有测试上面的代码。

      【讨论】:

      • 我也很少有带有@JsonIgnore 注释的属性,我是否也应该将它们包含在构造函数中?
      • 你不需要这样做 afaik
      【解决方案3】:

      创建一个自定义序列化,然后添加它:

      @JsonSerialize(using = MyCustomSerializer.class)
      private boolean field1;
      

      编写类似如下的扩展:

      public class MyCustomSerializer extends StdSerializer<Object> {
      
          public MyCustomSerializer() {
              super(Object.class);
          }
      
          @Override
          public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
              //...
          }
          
      }
      

      【讨论】:

        【解决方案4】:

        您也可以在字段 getter 中执行此操作。

        喜欢:

        public Boolean getField1() {
                this.field1 = field1 == null ? true : field1;
                return field1;
        }
        

        【讨论】:

          猜你喜欢
          • 2021-09-30
          • 2015-09-19
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-01
          • 1970-01-01
          相关资源
          最近更新 更多