1. ホーム
  2. java

文字列から整数への @Value アノテーション型キャスティング

2023-09-21 03:09:03

質問

ある値の出力を整数にキャストしようとしています。

@Value("${api.orders.pingFrequency}")
private Integer pingFrequency;

上記はエラーを投げます

org.springframework.beans.TypeMismatchException: 
    Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; 
nested exception is java.lang.NumberFormatException: 
    For input string: "(java.lang.Integer)${api.orders.pingFrequency}"

また @Value("(java.lang.Integer)${api.orders.pingFrequency}")

Googleはこのテーマについてあまり言っていないようです。 私は、この値が使用されるあらゆる場所でパースする必要があるのではなく、常に整数を扱うようにしたいのです。

回避策

セッターメソッドを使用して変換を実行することが回避策であることは理解していますが、Springがそれを行うことができるなら、私はむしろSpringについて何かを学びたいのです。

どのように解決するのですか?

クラスパスにあるプロパティファイルに

api.orders.pingFrequency=4

の中で試してみました。 @Controller

@Controller
public class MyController {     
    @Value("${api.orders.pingFrequency}")
    private Integer pingFrequency;
    ...
}

サーブレットコンテキストに:

<context:property-placeholder location="classpath:myprops.properties" />

完璧に動作しました。

つまり、あなたのプロパティが整数型でないか、プロパティのプレースホルダが正しく設定されていないか、間違ったプロパティキーを使っているかのいずれかです。

無効なプロパティ値で実行してみました。 4123; . 例外が発生しました。

java.lang.NumberFormatException: For input string: "4123;"

ということで、あなたのプロパティの値は

api.orders.pingFrequency=(java.lang.Integer)${api.orders.pingFrequency}