5

year私はパラメータとname:を持つこのフォームを持っています

/register?year=&name=test

私のクラスは次のようになります。

public class Organizer {
   private String name;
   private int year;

私のコントローラーは、これら2つのパラメーターをクラスにマップしますOrganizer

@RequestMapping("/register")
public String register(@Valid Organizer organizer, BindingResult errors...

問題は、パラメーターyearをintにバインドすることです。春は私にエラーを与えます

タイプ'java.lang.String'のプロパティ値をプロパティ'year'に必要なタイプ'int'に変換できませんでした。ネストされた例外はjava.lang.IllegalArgumentExceptionです。

独自のカスタムプロパティエディタを追加する方法を理解しましたが、getValue()呼び出されないようです

@InitBinder
public void binder(WebDataBinder binder) {
    binder.registerCustomEditor(int.class, new CustomIntEditor());
}

public class CustomIntEditor extends PropertyEditorSupport {

年パラメータが値以外の場合(->例外をキャッチ)にint値を返すことができると思いました0intInteger.parseInt()

@Override
public void setAsText(String text) throws IllegalArgumentException {

    //Some parsing and error handling
    setValue((int)0);
}

次のことができるようになりたいです。

  • フィールドyearint値に設定します0

  • カスタムエラーメッセージを作成します。organizer.year.invalid

4

2 に答える 2

7

に変更intIntegerます。これはオートボクシングの問題です。は空であるためyear、プリミティブ値に変換できません (デフォルト値を指定していないため)。

次に、注釈を付けて@NotNull、必要な検証を取得できます。

于 2012-05-07T12:51:33.250 に答える
0

最初に、アプリケーションをデバッグ モードで実行し、エラーがスローされている正確な行を見つけて、正確な詳細
を提供してください。データ型 (フォームの宣言) に問題があるに違いないと思います。休止状態を使用している場合は、休止状態エンティティ クラスを確認してください。 .

年属性のデータ型を確認します。

于 2012-05-07T11:47:53.070 に答える