75

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

@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 について何か学びたいと思います。

4

10 に答える 10

57

クラスパスに次を含むプロパティファイルがあると仮定します

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}
于 2013-03-13T19:38:10.187 に答える
32

インターネットで答えを探していたところ、次のことがわかりました

@Value("#{new java.text.SimpleDateFormat('${aDateFormat}').parse('${aDateStr}')}")
Date myDate;

したがって、あなたの場合、これを試すことができます

@Value("#{new Integer('${api.orders.pingFrequency}')}")
private Integer pingFrequency;
于 2013-03-13T19:35:28.540 に答える
7

プロパティファイルからプロパティ整数変換したい場合、私が見つけた2つの解決策があります:

特定のシナリオ: customer.propertiesにはフィールドとしてcustomer.id = 100が含まれており、Spring 構成ファイルで整数としてアクセスしたい。プロパティcustomerIdは、Bean Customerでint型として宣言されています。

解決策 1:

<property name="customerId" value="#{T(java.lang.Integer).parseInt('${customer.id}')}" />

上記の行では、プロパティ ファイルの文字列値がint型に変換されます。

解決策 2: プロパティの代わりに他の拡張子を使用します。たとえば、プロパティ ファイル名が customer.propertiesの場合は、customer.detailsにし、構成ファイルで次のコードを使用します

<property name="customerId"  	value="${customer.id}" />

于 2014-12-07T10:37:57.473 に答える
0

この問題は、同じファイル名を持つ 2 つのリソースがある場合にも発生します。クラスパス内で構成された2つの異なるjarまたはディレクトリパス内で「configurations.properties」と言います。例えば:

プロセスまたは Web アプリケーション (jar、war、または ear) に「configurations.properties」があります。しかし、別の依存関係 (jar) には、同じパスに同じファイル "configurations.properties" があります。次に、Spring はプロパティを取得する場所がわからず (@_@?)、@Value アノテーション内で宣言されたプロパティ名を送信するだけだと思います。

于 2016-10-03T13:25:37.637 に答える
0

私の場合、問題は、POST リクエストが GET と同じ URL に送信され ("?..=.." を使用してパラメーターを取得)、そのパラメーターがフォーム パラメーターと同じ名前を持っていたことです。おそらく、Spring はそれらを配列にマージしており、解析でエラーがスローされていました。

于 2016-12-18T14:14:49.650 に答える
0

@Value を使用する場合は、Class に @PropertySource アノテーションを追加するか、Spring の xml ファイルでプロパティ ホルダーを指定する必要があります。例えば。

@Component
@PropertySource("classpath:config.properties")
public class BusinessClass{
   @Value("${user.name}")
   private String name;
   @Value("${user.age}")
   private int age;
   @Value("${user.registed:false}")
   private boolean registed;
}

config.properties

user.name=test
user.age=20
user.registed=true

これはうまくいきます!

もちろん、アノテーションの代わりにプレースホルダー xml 構成を使用できます。spring.xml

<context:property-placeholder location="classpath:config.properties"/>
于 2018-03-30T03:00:45.730 に答える