首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring如何将带有单位的配置值转换为自然数

Spring如何将带有单位的配置值转换为自然数
EN

Stack Overflow用户
提问于 2019-07-15 21:51:33
回答 1查看 78关注 0票数 0

我可以将这些值添加到我的配置文件中:

代码语言:javascript
运行
复制
server:
  tomcat:
    max-http-post-size: 1024MB

这有一个很大的好处,那就是我可以用一个很容易读懂的带单位的数字来代替编写100000000000。但是,如果我想使用它作为我自己的配置值呢?

例如,这不起作用:

代码语言:javascript
运行
复制
@Value("${server.tomcat.max-http-post-size}")
private Integer maxPostSize;

因为它会产生:

代码语言:javascript
运行
复制
Caused by: java.lang.NumberFormatException: For input string: "1024MB"
    at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:na]
    at java.base/java.lang.Integer.parseInt(Integer.java:652) ~[na:na]
    at java.base/java.lang.Integer.valueOf(Integer.java:983) ~[na:na]
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:211) ~[spring-core-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:115) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:429) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:402) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    at org.springframework.beans.TypeConverterSupport.convertIfNecessary(TypeConverterSupport.java:73) ~[spring-beans-5.1.8.RELEASE.jar:5.1.8.RELEASE]
    ... 32 common frames omitted

我在Spring Boot 2.1.6上尝试过。我知道如何使用自己的代码或某个库将像1024MB这样的字符串转换为数字,但我希望使用Spring Boot方法。

EN

Stack Overflow用户

发布于 2019-07-15 22:00:09

简而言之,它不是这样的。

示例属性

代码语言:javascript
运行
复制
server:
  tomcat:
    max-http-post-size: 1024MB

在内部处理,并将实际映射到代码中的字符串。然后对该字符串进行解析,并相应地将其映射为一个长整型。

因此,如果你想实现类似的东西,你通常必须做类似的事情。另一种常见的模式是在名称中包含度量单位的属性。例如:

代码语言:javascript
运行
复制
server.tomcat.max-http-post-size-mb: 1024

这使得它很明确,尽管你失去了灵活性。

编辑:

只要快速阅读一下,就会发现如果您更新到最新版本的spring (来自5.1+),则有一个名为DataSize的类,它实际上应该允许您将这样的字符串映射到另一个类。

如果您升级了spring版本,您应该能够声明此类型的类并添加@Value

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/util/unit/DataSize.html

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57041225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档