2012-03-07 19 views
8

Spring MVC(@Validate)でバッキングオブジェクトとアノテーションを持つバリデータを使用しました。それはうまくいった。Spring MVCのコンテキスト外でSpring Validatorを使用する

今私は自分自身のバリデーションを実装することでSpringマニュアルの動作を正確に理解しようとしています。バリデーターを "使用する"方法についてはわかりません。

マイバリ:

import org.springframework.validation.Errors; 
import org.springframework.validation.ValidationUtils; 
import org.springframework.validation.Validator; 

import com.myartifact.geometry.Shape; 

public class ShapeValidator implements Validator { 

@SuppressWarnings("rawtypes") 
public boolean supports(Class clazz) { 
    return Shape.class.equals(clazz); 
} 

public void validate(Object target, Errors errors) { 
    ValidationUtils.rejectIfEmpty(errors, "x", "x.empty"); 
    ValidationUtils.rejectIfEmpty(errors, "y", "y.empty"); 
    Shape shape = (Shape) target; 
    if (shape.getX() < 0) { 
     errors.rejectValue("x", "negativevalue"); 
    } else if (shape.getY() < 0) { 
     errors.rejectValue("y", "negativevalue"); 
    } 
} 
} 

私が検証しようとShapeクラス:

public class Shape { 

protected int x, y; 

public Shape(int x, int y) { 
    this.x = x; 
    this.y = y; 
} 

public Shape() {} 

public int getX() { 
    return x; 
} 

public void setX(int x) { 
    this.x = x; 
} 

public int getY() { 
    return y; 
} 

public void setY(int y) { 
    this.y = y; 
} 
} 

主な方法:

public class ShapeTest { 

public static void main(String[] args) { 
    ShapeValidator sv = new ShapeValidator(); 
    Shape shape = new Shape(); 

    //How do I create an errors object? 
    sv.validate(shape, errors); 
} 
} 

エラーは単なるインターフェイスなので、私は」することができます通常のクラスのようにインスタンス化します。バリデーターを実際に「使用」して、形状が有効か無効かを確認するにはどうすればよいですか?

注:この図形はになります。はxとyがないため無効です。

答えて

19

なぜ春が提供する実装を使用しないでくださいorg.springframework.validation.MapBindingResult

あなたが行うことができます

Map<String, String> map = new HashMap<String, String>(); 
MapBindingResult errors = new MapBindingResult(map, Shape.class.getName()); 

ShapeValidator sv = new ShapeValidator(); 
Shape shape = new Shape(); 
sv.validate(shape, errors); 

System.out.println(errors); 

これは、エラーメッセージであることすべてを出力します。

幸運

+3

これは魅力的でした!私は、ドキュメントが検証の概念が最初に現れるときに、その動作が正しいことを示すことを望みます。 – Harry

+4

2番目の引数Shape.class.getName()が必要な理由を教えてください。 –

関連する問題