我在OpenAPI 3中定义了一个REST API。0.1规范,使用Openapi Spring Code Generator生成Java类。
为防止滥用,除非另有规定,否则所有字符串字段的长度应限制在5000个字符。对于API规范中设置了maxLength的字段,这很有效,但大多数字段没有设置任何参数。
有没有一个好的解决方案来定义一个默认值,无论是在spec还是在Sping Boot 中(记住,模型类是在每次构建时从spec自动生成的)?
除了spring.servlet.multipart.max-request-size
,我找不到任何东西,但是由于还有用于上传文件的端点,这不是一个可行的选择。
任何比手动将maxLength: 5000
添加到几千个字段中更容易完成此任务的方法都是有帮助的。
2条答案
按热度按时间nue99wik1#
问题
您已经确定需要在API中的所有String项上设置默认的maxLength。
溶液
使用提供的mustache模板可以轻松完成此操作。我告诉你
测试方案
我使用以下模式进行测试。
此模式对字符串和整数都有验证和无验证。这将确保我们生成的模型应用预期的默认验证
胡子模板
Spring生成器有一个名为
beanValidationCore.mustache
的模板。此模板处理所有bean验证。此模板在此段中从pojo.mustache
调用:这告诉模板引擎,如果它应该使用beanValidation(
{{#beanValidation}}
),那么此时它将调用beanValidation
模板({{>beanValidation}}
)。注意:>
表示使用其他模板。在我的简短测试中,这总是评估为true。我检查了文档,和it claims,
useBeanValidation
默认为false。然而,看看代码,这显然不是真的。因此,我们需要做的就是更新beanValidationCore.mustache
以提供默认值。通过在模板的第8行和第9行插入以下代码片段,可以轻松地完成此操作这将检查要验证的项是否为String。如果是,并且没有设置maxLength,那么它将对字段应用注解
@Size(max = 5000)
。生成代码
使用上面的API和新模板,我在pojo中得到了以下结果。
您会注意到,唯一具有默认验证的字段是
unvalidatedString
。这应该正是你所期望的。最后一点
Mustache模板功能非常强大,有很多可用字段。您可以通过在globalProperties中启用
debugModels: "true"
来检查这些字段。这将产生类似于以下内容的输出:输出中的任何布尔值都可以在模板中被检查并用作条件,而任何非布尔值都可以直接检索和使用。您可以利用这一点进一步自定义对象的输出。
祝你好运。
xvw2m8pv2#
在open-api中定义一个新的组件lengthLimitedString在您的情况下是否可行。json/yml并在请求中使用它。body对象定义为schema $ref?这样,验证将内置到生成的代码中,对调用客户端可见,并将包含在任何生成的客户端代码中。
这可以在open-api中实现。json/yml,全局查找和替换字符串。