Spring 启动验证,在反序列化 requestBody 时期望字段,但不是来自 responseBody

Spring Boot validation, expect field when deserializing requestBody, but not from responseBody

我想知道 Spring 引导最佳实践。

我有一个 Spring 引导 API,它基本上暴露了另一个 API。 这是一个必要的邪恶。 外部 API 是一场彻底的灾难,我们不能直接将其暴露给我们的客户。

问题是这个 API 有时需要 requestBody 中的字段, 但不会 return 将它们提供给消费者。

将其转换为 Spring 引导(Javax 验证或 Lombok)。 我不能只在这些字段上放置 @Notnull 或 @Nonnull 注释。 因为当 Jackson 试图反序列化 responseBody 时它会失败。

我应该在这里做什么?

假设数据在JSON-结构中传输。

使用 @JsonProperty(value = "example_field_name", required = false),将 required 设置为 false,来注释您的 属性。如果 JSON-Structure.

中缺少字段,那么 Jackson 将不会抛出任何错误

JsonProperty Documentation

如果请求和响应负载不同,用不同的 类 来表示它们可能是有意义的。为了处理将 DTO 映射到域模型(以及相反的方式)的样板代码,您可以查看映射框架,例如 MapStruct,它与 Spring.[=11 集成得很好=]

或者为输入和输出定义不同的类,您可以查看验证组