DataBinder を使用して、次のように値をオブジェクトにマップします。
final var binder = new DataBinder(target);
binder.setIgnoreUnknownFields(false);
binder.bind(new MutablePropertyValues(properties));
現在、小数点記号としてコンマを持ち、double に変換する必要がある文字列がいくつかあります。
「0,00」 は double に変換できないため、次のエラーが表示されます。
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"]
Locale.FR
DataBinder でコンマを小数点記号として受け入れるようにする方法や、ロケール(データ ソースのロケール) を使用する方法がわかりません。
これは役に立ちませんでした:
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());
}
}
}