【问题标题】:@NumberFormat form validation for European local w/ Swagger带有 Swagger 的欧洲本地的 @NumberFormat 表单验证
【发布时间】:2019-08-20 15:15:35
【问题描述】:

我有一个表单,它是 Spring-Boot REST 端点的 POJO。

看起来像这样:

@NumberFormat(style = NumberFormat.Style.DEFAULT, pattern = "##.###.###,##")
private Double floor_space;

当我在 swagger 中启动应用服务器并输入数字时:55,57 swagger 说这不是一个数字。我也试过了

style = NumberFormat.Style.CURRENCY 

但这也不起作用。

【问题讨论】:

    标签: java spring-boot number-formatting


    【解决方案1】:

    首先,style属性在指定pattern时是没有作用的,所以不能同时使用:

    每个属性都是互斥的,所以每个属性只能设置一个 注释实例(格式化最方便的一个实例) 需要)。 指定pattern()属性时,优先 在 style() 属性上。当没有注释属性时 指定时,应用的默认格式是基于样式的任一数字 货币,取决于带注释的字段或方法参数 输入。

    Source

    接下来,根据我对文档的理解,该模式似乎是java.text.DecimalFormat 指定的模式。 DecimalFormat 模式始终将. 识别为小数分隔符,将, 识别为分组分隔符,这会使您的模式无效:

    .   Decimal separator or monetary decimal separator
    ,   Grouping separator
    

    解析时字符串中哪个字符是小数点分隔符的决定是在运行时由给定的Locale 完成的。

    显然无法调整 @NumberFormat 注释的语言环境,因此您有两个选择:

    • 调整您的系统/VM 区域设置。我强烈建议不要这样做,因为这会影响您的所有代码,并且可能会在代码默认为默认语言环境的任何地方产生奇怪的行为。
    • 或者根本不使用@NumberFormat 注释,如本答案所述:Use Different Locale for @NumberFormat in Spring

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-08
    • 2015-05-05
    • 1970-01-01
    • 2012-09-22
    • 2019-06-30
    • 1970-01-01
    • 2018-09-04
    相关资源
    最近更新 更多