如何制作最好的DTO请求类别?

时间:2019-06-02 10:44:09

标签: java json spring-boot jackson

我需要制作一个表示JSON请求正文的DTO类。

我想通过final字段使其完全不可变。我已经看到了基于@JSONCreator所有args构造函数的实现,但是我还需要一个新功能。

DTO类应该具有灵活性,并且可以容忍请求中的某些缺失字段,同时确保所有必要的属性都就位。

能否请您提供此类DTO的示例?

2 个答案:

答案 0 :(得分:2)

Jackson将自动处理丢失的字段,并将这些字段设置为null

对于序列化响应时,是否应省略空字段还是将其设置为特殊值null,它也具有一些配置选项。

objectMapper.setSerializationInclusion(Include.NON_NULL);

另一方面,如果您正在设计API,则可能需要查看Swagger / OpenAPI并从那里声明性地定义API(您可以指定字段是可选字段还是必填字段)。然后使用代码生成工具自动生成您的DTO。 (他们将遵循最佳模式,并提供Fluent API样式设置程序。)

答案 1 :(得分:1)

@jbx指出,杰克逊会自动处理丢失的字段并将其设置为null

如果要确保填充必填字段,则需要将其标记为@javax.annotation.Nonnulllombok.NonNull

在对DTO类的请求反序列化时,如果该字段为null,则使用此Jackson会抛出NullPointerException