2 jackson lombok java-8 option-type
在我的代码中,我有一个如下所示的类
public enum Test {
VALUE1,
VALUE2
}
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class MyClass {
@JsonProperty(name = "test")
private Optional<Test> test = Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但会出现以下错误:
警告:@Builder 将完全忽略初始化表达式。
太好了,让我补充一下@Builder.Default...
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class MyClass {
@Builder.Default
@JsonProperty(name = "test", required = true)
private Optional<Test> test = Optional.empty();
}
Run Code Online (Sandbox Code Playgroud)
这修复了错误,但现在,test当该值不存在时,该值将被强制为 null,而不是Optional.empty。我想保留可选模式并让对象的用户决定他们想要如何处理可选,而不是 Lombok 或 Jackson。
有没有办法让这项工作保持默认值Optional.empty()?如果没有,有没有办法可以忽略这个警告,因为它无法修复?
编辑:
想象一下,我们将一个有效负载传递到某个空的端点(因为我们想测试对象中唯一值的可选)
POST /my/end/point
有效负载将是{}
然后我们使用 Jackson 取回对象
MyClass result = mapper.readValue(payload, MyClass.class);
当我们查看生成的对象时,我们会发现它MyClass.test与使用时的预期null不同。否则,我们会收到上面的警告,但默认值已正确指定为。Optional.empty()@Builder.DefaultOptional.empty()
存在代码风格问题。让 Lombok 为可选字段生成 getter/setter/constructor/builder 会产生以下结果:
\n\npublic MyClass(Optional<Test> test) {\n this.test = test;\n}\n\npublic Optional<Test> getTest() {\n return test;\n}\n\npublic void setTest(Optional<Test> test) {\n this.test = test;\n}\n\n// ... imagine Builder here ...\nRun Code Online (Sandbox Code Playgroud)\n\ngetter 还可以,但是构造函数、setter 和 Builder 使用起来非常不方便。您必须Test使用其中一种静态方法来包装Optional,如下所示:
// If value is known\nmyClass.setTest(Optional.of(Test.VALUE1));\n\n// If initializing with a variable which maybe null\nmyClass.setTest(Optional.ofNullable(anotherTest));\nRun Code Online (Sandbox Code Playgroud)\n\n它很丑。有一个更好的办法。
\n我假设您只需要Optionalgetter 上的返回类型,因此请提供您自己的 getter 实现,强制 Lombok 不生成它自己的\xe2\x80\x99s。
@Builder\n@AllArgsConstructor\n@NoArgsConstructor\n@Getter\npublic class MyClass {\n\n @JsonProperty(name = "test", required = true)\n private Test test;\n\n public Optional<Test> getTest() {\n return Optional.ofNullable(test);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n智慧之源:Options 和 Lombok @ Medium
\n| 归档时间: |
|
| 查看次数: |
10572 次 |
| 最近记录: |