openapi 3.0 有效的最小值和最大值

2023-11-27

我有下面的模式定义来表示commission amount在我的 openapi 合同中。

commissionAmount:
  type: number
  minimum: -99999.99
  maximum: 99999.99

生成的代码:

@Valid
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}

生成的代码很好并且符合预期。我只是想知道这些是-99999.99 and 99999.99有效值minimum and maximum.

提出这个问题的原因是它没有检查小数部分的限制。例如,我期望12345.678是无效的 ,12345.67已验证。但它将两者标记为有效。

I read @Digits用于检查整数和小数部分的位数限制。我怎么告诉openapi-generator-maven-plugin注释Digits还有?

预期生成的代码:

@Valid
@Digits(integer = 5, fraction = 2)
@DecimalMin("-99999.99") @DecimalMax("99999.99") 
public BigDecimal getCommissionAmount() {
  return commAmt;
}

在 OpenAPI 中指定这一点的方法是使用multipleOf:

commissionAmount:
  type: number
  minimum: -99999.99
  maximum: 99999.99
  multipleOf: 0.01

但是,使用 OpenAPI 生成器不会产生注释为了这。原因是没有javax.validation可以表示的注解multipleOf有效地(想象一下试图表达multipleOf: 0.02- @Digits是不够的)。

但是,您可以创建自己的注释,因为该用户具有:https://github.com/OpenAPITools/openapi-generator/issues/2192#issuecomment-575132233

使用以下注释和验证器:

@Target({METHOD, FIELD})
@Retention(RUNTIME)
@Repeatable(MultipleOf.List.class)
@Constraint(validatedBy = MultipleOfValidator.class)
public @interface MultipleOf {

    double value();

    String message() default "{error.multipleOf}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default { };

    @Target({ METHOD, FIELD })
    @Retention(RUNTIME)
    @Documented
    @interface List {
        MultipleOf[] value();
    }

}
public class MultipleOfValidator implements ConstraintValidator<MultipleOf, Number> {

    private double value;

    @Override
    public void initialize(MultipleOf constraintAnnotation) {
        this.value = constraintAnnotation.value();
    }

    @Override
    public boolean isValid(Number value, ConstraintValidatorContext context) {
        return (value == null) || (value.doubleValue() / this.value) % 1 == 0;
    }

}

然后,您可以分叉生成器并将新注释添加到模板中:https://github.com/OpenAPITools/openapi-generator/blob/master/modules/openapi-generator/src/main/resources/Java/beanValidationCore.mustache

像这样的一行:

{{#multipleOf}}@MultipleOf({{multipleOf}}){{/multipleOf}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openapi 3.0 有效的最小值和最大值 的相关文章

  • “JSONArray 文本必须在 null 的第 1 个字符处以 '[' 开头”

    只是想知道这个错误可能意味着什么 我从下面的代码中得到它 try JSONArray jArray new JSONArray result for int i 0 i
  • 使用 java 删除 XML 根的子级

    这是我的 xml 文件
  • 如何在ArrayList中的特定位置插入对象

    假设我有一个大小为 n 的对象的 ArrayList 现在我想在特定位置插入另一个对象 假设在索引位置 k 大于 0 且小于 n 并且我希望索引位置 k 处及其之后的其他对象向前移动一个索引位置 那么有没有什么方法可以直接在Java中做到这
  • 将处理项目移至 Eclipse

    我已经在处理项目上工作了一段时间 现在想将其移至 Eclipse 中 我已经在 Eclipse 环境中安装了 Proclipse 我有很多扩展名为 pde 的文件 然而 Proclipse 文件都以 java 结尾 所有 pde 文件都存在
  • JAVA 中的 Composer 相当于什么? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前从 PHP 转向 java 有没有类似的工具composer https getcomposer org 在 PHP 中用于 JAV
  • 了解 netty 通道缓冲区和水印

    我正在尝试了解网络缓冲区和水印 作为一个测试用例 我有一个 netty 服务器 它向客户端写入数据 客户端被阻止 基本上每次读取之间有 10 秒的睡眠时间 在正常 I O 下 如果接收方被阻塞 TCP 发送方将受到限制 由于流量控制 发送速
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 垂直 ViewPager 中的动画

    我需要垂直制作这个动画ViewPager https www youtube com watch v wuE 4jjnp3g https www youtube com watch v wuE 4jjnp3g 这是我到目前为止所尝试的 vi
  • 在 Eclipse 3.5 上安装旧版 TestNG 插件时出现问题

    我正在尝试在 eclipse 3 5 上安装 TestNG 5 11 并获得以下信息 eclipse buildId unknown java version 1 6 0 19 java vendor Sun Microsystems In
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • Maven WebApp META-INF context.xml

    我正在使用 Maven 3 并且尝试在 webapp 文件夹下添加 META INF 文件夹 所以我正在尝试执行以下操作 src main webapp META INF context xml WEB INF 下面是我的 POM 文件
  • 对对象集合进行排序[重复]

    这个问题在这里已经有答案了 如果我有一个简单的字符串列表 List
  • Java 中如何验证字符串的格式是否正确

    我目前正在用 Java 编写一个验证方法来检查字符串是否是要更改为日期的几种不同格式之一 我希望它接受的格式如下 MM DD YY M DD YY MM D YY 和 M D YY 我正在测试第一种格式 每次它都告诉我它无效 即使我输入了有
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • 避免 @Secured 注释的重复值

    我正在尝试使用以下方法来保护我的服务方法 Secured如下 public interface IUserService Secured ROLE ROLE1 ROLE ROLE2 ResponseEntity saveUser Creat
  • Java 8 方法签名不一致

    Java 8 为我们提供了具有很长签名的新方法 如下所示 static
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 使用 Java 8 Spring 4 + MyBatis 集成问题

    使用 Java 8 1 8 0 60 Spring 4 2 1 和 MyBatis 3 3 0 时遇到以下异常 Sep 29 2015 11 02 58 AM org springframework context annotation A
  • 在java中执行匿名pl/sql块并获取结果集

    我想执行匿名 PL SQL 并需要获取结果集对象 我得到了可以通过在 PL SQL 块内使用游标来完成的代码 但 PL SQL 块本身将以文本形式来自数据库 所以我无法编辑该 PL SQL 块 并且它只会返回两个值 其列名始终相同 它将返回
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea

随机推荐

  • 验证AWS API网关的请求路径参数?

    假设我有一个带有路径的 api and pets and pets pet 现在我正在尝试验证路径 pets 参数 以便只有长度为 6 的字母数字字符的路径才会被验证并处理到后端 lambda 所有其他路径都将被拒绝 我尝试了以下 swag
  • 我可以使用 gmail 作为我网站的 smtp 服务器吗

    您好 我正在尝试建立并运行一个网站 它目前托管在 AWS 上 因此我目前没有运行自己的 smtp 服务器 所以在阅读了几篇文章后 我了解到我们可以使用gmail作为smtp服务器 我想仔细检查我读到的内容是否正确 我将使用智能求职板软件 我
  • 在C++ Win32中创建透明窗口

    我正在创建一个非常简单的 Win32 C 应用程序 其唯一目的是仅显示半透明的 PNG 窗口不应该有任何镶边 并且所有不透明度都应该在 PNG 本身中控制 我的问题是 当窗口下的内容发生变化时 窗口不会重新绘制 因此 PNG 的透明区域与应
  • 从互联网下载 SQLite 数据库并加载到 Android 应用程序中

    对于我的 Android 应用程序 我想使用一个大型数据库 大约 45 MB 一种解决方案是将 拆分的 数据库包含在资产文件夹中 并在第一次启动时将其复制到数据库目录 但这会消耗两次磁盘空间 一次在无法删除文件的资产文件夹中 一次在文件已复
  • 在DLL接口中使用boost::shared ptr可以吗?

    在 C 中开发一个返回 boost 共享指针并将其用作参数的 DLL 是否有效 那么 这样导出函数可以吗 1 boost shared ptr
  • 竞技编程中的快速输入/输出

    我在竞争性编程竞赛的解决方案中多次遇到过这个特定的代码片段 我了解此代码的基本用途来克服时间限制 但我想更深入地了解它 我知道 unistd h 可以访问系统调用包装函数 例如 fork pipe 和 I O 原语 读 写等 如果有人可以解
  • 如何创建 GUI 并以编程方式对 Cocoa 事件做出反应?

    我发现了如何以编程方式在 Cocoa 中创建一个窗口 但不知道如何对事件做出反应 该窗口不对退出请求或按钮单击做出反应 我尝试添加以下控制器并使用 setDelegate setTarget 但没有运气 interface AppContr
  • 使用 hibernate 以编程方式验证架构

    在大多数项目中 运行你的方法java app模式验证是使用该配置 使用 spring 时 spring jpa hibernate ddl auto validate 我遇到了一个问题 我需要在运行期间的特定时间验证我的架构 有什么方法可以
  • 如何在 Python Git hook 中使用 raw_input() ?

    我正在为 Git 编写一个预提交钩子 它运行 pyflakes 并检查修改文件中的制表符和尾随空格 Github 上的代码 我想通过请求用户确认来覆盖钩子 如下所示 answer raw input Commit anyway N y if
  • try catch 块的成本是多少?

    好多少是 if condition try something catch SomeEx ex 而不是这个 try if condition something catch SomeEx ex 当我进入 try 块时 JVM 实际上会做什么
  • 动画按钮允许用户交互不起作用

    我在 NSObject 类的代码中创建了一个 UIbutton 它控制 UIViewController 类中的游戏 该按钮在游戏的大部分时间都工作正常 但在某个时刻我希望按钮淡入 淡出 一旦淡入 淡出开始动画 按钮就不再具有交互性 我已经
  • 从 json 创建 DynamoDB 表

    我想知道是否可以从表定义 json 本身创建 dynamodb 表 我研究了 aws cli 工具 但找不到任何方法来执行此操作 只是想知道是否可能 aws dynamodb create table file tabledenifisio
  • 如何将 mySql SQL 脚本转换为 MS SQL 脚本?

    我必须将客户 MySql 数据库架构 数据迁移到 MS SQL SERVER 2008 最后我收到了 70 Mb SQL 文件 其中包含与 MSSQL 不兼容的 mySQL 方言 DROP TABLE IF EXISTS kladr CRE
  • Facebook 登录与 CSRF 状态令牌不匹配的问题

    我做了一些搜索 但没有找到与我的问题相关的任何内容 我目前正在尝试对我的网站实施 Facebook 登录 但由于 htaccess mod 重写 URL 我在登录身份验证方面遇到了问题 该代码工作完美 如果我在没有 mod 重写规则的情况下
  • c从 R 中的字符串绑定动态列名

    我想将一列绑定到数据框 并使用从字符串动态分配的列名称 y attribute Survived cbind test data y attribute NA 这会导致新列添加为y attribute而不是所需的Survived属性以字符串
  • Mockito 空指针异常

    我遵循了 hoaz 的建议 但是 我遇到了空指针异常 RunWith MockitoJUnitRunner class public class GeneralConfigServiceImplTest InjectMocks privat
  • Perl 可以“静态”解析吗?

    An 文章名为 Perl 无法解析 形式化证明 正在巡视 那么 Perl 是否在 运行时 或 编 译时 决定其解析代码的含义 在我读过的一些讨论中 我的印象是这些论点源于不精确的术语 所以请尝试在答案中定义您的技术术语 我故意没有定义 运行
  • 如何将列表中的随机值分配给 pandas 数据框中的列?

    我正在 Bigquery 中使用 Python 并且有一个大型数据帧 df 大约 700 万行 我还有一个列表 lst 包含一些日期 例如给定月份的所有日期 我正在尝试在 df 中创建一个附加列 random day 并使用每行中 lst
  • HTTPS 到 HTTPS 重定向 Nginx

    如何将一个 HTTPS 重定向到另一个 HTTPS 我只有一个域的一个 SSL 证书 例如 如何重定向https example org to https example com 我已经尝试搜索谷歌和其他论坛 但没有发现任何效果 这非常容易
  • openapi 3.0 有效的最小值和最大值

    我有下面的模式定义来表示commission amount在我的 openapi 合同中 commissionAmount type number minimum 99999 99 maximum 99999 99 生成的代码 Valid