我需要制作一个表示JSON请求正文的DTO类。
我想通过final
字段使其完全不可变。我已经看到了基于@JSONCreator
所有args构造函数的实现,但是我还需要一个新功能。
DTO类应该具有灵活性,并且可以容忍请求中的某些缺失字段,同时确保所有必要的属性都就位。
能否请您提供此类DTO的示例?
答案 0 :(得分:2)
Jackson将自动处理丢失的字段,并将这些字段设置为null
。
对于序列化响应时,是否应省略空字段还是将其设置为特殊值null
,它也具有一些配置选项。
objectMapper.setSerializationInclusion(Include.NON_NULL);
另一方面,如果您正在设计API,则可能需要查看Swagger / OpenAPI并从那里声明性地定义API(您可以指定字段是可选字段还是必填字段)。然后使用代码生成工具自动生成您的DTO。 (他们将遵循最佳模式,并提供Fluent API样式设置程序。)
答案 1 :(得分:1)
@jbx指出,杰克逊会自动处理丢失的字段并将其设置为null
。
如果要确保填充必填字段,则需要将其标记为@javax.annotation.Nonnull
或lombok.NonNull
。
在对DTO类的请求反序列化时,如果该字段为null,则使用此Jackson会抛出NullPointerException
。