我使用 DataBinder 将值映射到这样的对象:
final var binder = new DataBinder(target);
binder.setIgnoreUnknownFields(false);
binder.bind(new MutablePropertyValues(properties));
现在我有一些以逗号作为小数分隔符的字符串,需要转换为双精度。
这给了我以下错误,因为“0,00” 无法转换为双精度:
Field error in object 'target' on field 'price': rejected value [0,00];
codes [typeMismatch.target.price,typeMismatch.price,typeMismatch.double,typeMismatch];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable:
codes [target.price,price]; arguments []; default message [price]]; default message
[Failed to convert property value of type 'java.lang.String' to required type 'double'
for property 'price'; nested exception is java.lang.NumberFormatException: For input string: "0,00"]
我不知道如何使 DataBinder 接受逗号作为小数分隔符或使用语言环境Locale.FR
(这是数据源语言环境)。
这没有帮助:
LocaleContextHolder.setLocale(Locale.FRANCE);
Locale.setDefault(Locale.FRANCE);
有人可以告诉我如何处理小数点逗号吗?
这是我的测试用例:
class DataBinderTest {
class Foo {
public double price;
public void setPrice(double price) {
this.price=price;
}
}
@Test
void testMapping() throws BindException {
final var properties = new Properties();
properties.setProperty("price","0,00");
final var binder = new DataBinder(new Foo());
binder.setIgnoreUnknownFields(false);
binder.bind(new MutablePropertyValues(properties));
if (binder.getBindingResult().hasErrors()) {
throw new BindException(binder.getBindingResult());
}
}
}