如何在Java中的@Builder类中设置`null`或`-1`作为`int`和`long`属性的默认值?

问题描述 投票:0回答:1

问题

我无法分享确切的代码,但这里有一个示例来演示相同的代码。

假设我有一个如下的类,我试图将其作为有效负载发送到 API。我使用

@Builder
模式只是为了确保只需要设置必需的字段来准备有效负载。

@Builder
public class SomeRandomClass {
    // required field
    public String field1;

    // optional field(s)
    public long field2;
    public int field3;
    public String field4;

    public String toJSON() {
       return new Gson().toJson(this);
    }

}

我正在按照以下代码准备有效负载,

SomeRandomClass payload = SomeRandomClass
                                .builder()
                                .field1("TEST DATA")
                                .build();

但是,默认情况下,

field2
field3
的值为
0
,而
field4
的值为
null

现在,我还使用

toJSON()
方法来获取实例的 JSON 字符串。此方法从 JSON 中消除了
null
值,因此在准备实际 JSON 负载之前,将过滤掉具有
null
值的属性。然而,值为
0
的字段仍然保留在有效负载中。因此,API 抛出错误,指出
0
不是这些字段的有效值,这是正确的。

我的问题

  1. 有没有办法将
    null
    设置为
    int
    long
    变量的默认值而不是
    0
    ,以便
    toJSON
    处理它?
  2. 如果不为空,那么是否可以设置像
    -1
    这样的东西,可以通过自定义逻辑在
    toJSON()
    方法中过滤掉?
  3. 还有其他方法可以解决这个问题吗?

我的期望

我的期望是有一个复制 JSON 的 POJO,但是显式设置的字段应该只是实际访问 API 的结果 JSON 的一部分。

java json spring-boot design-patterns
1个回答
0
投票

我有一个解决问题的方法。如果我们使用非原始数据类型

int
long
,而不是使用
Integer
Long
,则使用
null
设置未初始化的值,与
String
相同。不过,我很高兴获得这个问题的更多答案。

© www.soinside.com 2019 - 2024. All rights reserved.