问题
我无法分享确切的代码,但这里有一个示例来演示相同的代码。
假设我有一个如下的类,我试图将其作为有效负载发送到 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
不是这些字段的有效值,这是正确的。
我的问题
null
设置为 int
和 long
变量的默认值而不是 0
,以便 toJSON
处理它?-1
这样的东西,可以通过自定义逻辑在toJSON()
方法中过滤掉?我的期望
我的期望是有一个复制 JSON 的 POJO,但是显式设置的字段应该只是实际访问 API 的结果 JSON 的一部分。
我有一个解决问题的方法。如果我们使用非原始数据类型
int
和 long
,而不是使用 Integer
和 Long
,则使用 null
设置未初始化的值,与 String
相同。不过,我很高兴获得这个问题的更多答案。