你能帮我解决我的问题吗?我在 Java Spring Boot 上有一个后端,我需要使用
GET
请求来传输例如“2300,55”。据我了解,GET
只能传输字符串和长数字,这还没有问题,但我需要用逗号或点传输数字。如何做到这一点?
我尝试解析它,获取字符串并在 try/catch 块中解析:
...
@PathVariable("weight") String weight
try {
float parsedWeight = Float.parseFloat(weight);
} catch (NumberFormatException e) {
...
并且被抓住了
java.lang.NumberFormatException:对于输入字符串:“2300,55”
但是如果我用点而不是逗号“2300.55”尝试它,它会保存到数据库中,但它变成了“2300”。数据库 PostgreSQL,列类型为
REAL
-> 即 float4
(单精度浮点数(4 字节))
并捕获 java.lang.NumberFormatException: 对于输入字符串:“2300,55”
使用小数逗号而不是点等问题与本地化有关。如果远程发送类似
2300,55
的数字,则意味着它以本地化形式发送数字。一般来说,这在网络交互中被视为“极其糟糕”:所有数据都应以唯一定义的与区域设置无关的形式在程序之间发送。本地化形式只能在与人类交互时使用。因此,建议的方法是修复远程端,使其仅发送中性表示。
但是,如果您对远程端没有影响并且必须处理损坏的表单,请尝试单独设置预期区域设置或 LocalDecimalSeparator
的 Java Scanner 类方法。对于小数逗号,这可能是某些欧洲语言环境。
(我无法回答数据库问题。但是,语言环境问题应该具有相同的主要形式。)