2

Spring 3.1 を使用するプロジェクトに取り組んでいます。サーバー側ですべての検証を行っていますが、リクエスト パラメータが Long または Integer オブジェクトにバインドされている場合に問題が発生しています。ほとんどの無効な値は最終的に例外となり、エラー メッセージが表示されますが、リクエスト パラメータの数字の間に空白が含まれている場合は、この限りではありません。たとえば、「12345 6789」をバインドすると、検証エラーが発生することが予想されますが、代わりに空白が削除されます。

デバッガーを使用して、これが org.springframework.util.NumberUtils で発生していることを確認しました。StringUtils.trimAllWhitespace が呼び出されて、すべての入力から空白が削除されます。これは十分に一般的なユースケースのようですが、これまでのところ、適切な解決策を持っている人を見つけることができませんでした. 数字のみを受け入れながら、リクエスト パラメータの文字列を Long または Integer に簡単に変換するにはどうすればよいでしょうか?

4

1 に答える 1

0

解決策は、ニーズを満たすカスタム バリデータを作成することです。

ドキュメントからの例:

制約宣言:

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MyConstraintValidator.class)
public @interface MyConstraint {
}

制約の実装

import javax.validation.ConstraintValidator;

public class MyConstraintValidator implements ConstraintValidator {

    @Autowired;
    private Foo aDependency;

    ...
}

編集:

カスタム プロパティ コンバータドキュメントの作成.

@Controller public class MyFormController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

    // ...
}
于 2012-12-21T01:11:57.593 に答える