0

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.FRDataBinder でコンマを小数点記号として受け入れるようにする方法や、ロケール(データ ソースのロケール) を使用する方法がわかりません。

これは役に立ちませんでした:

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());
        }
    }
}
4

1 に答える 1