これは、検証グループを使用して行うことができます。ここでは、これを達成する方法を次のとおりです。
public class GroupValidationTest {
public static void main(String[] args) {
Validator v = Validators.newValidator();
Model m = new Model();
m.user = "Harry";
m.password = "Potter";
Set<ConstraintViolation<Model>> validate = v.validate(m, INPUT.class);
System.out.println(validate.size());
validate = v.validate(m, INPUT.class, OUTPUT.class);
System.out.println(validate.size());
validate = v.validate(m, OUTPUT.class);
System.out.println(validate.size());
m.password = null;
validate = v.validate(m, INPUT.class, OUTPUT.class);
System.out.println(validate.size());
validate = v.validate(m, OUTPUT.class);
System.out.println(validate.size());
}
public static class Model {
@NotEmpty(groups={INPUT.class, OUTPUT.class})
public String user;
@NotEmpty(groups={INPUT.class})
public String password;
}
public interface INPUT {}
public interface OUTPUT {}
}
この出力:
0 -> Full object, validate INPUT
0 -> Full object, validate INPUT + OUTPUT
0 -> Full object, validate OUTPUT
1 -> null password, validate INPUT + OUTPUT
0 -> null password, validate OUTPUT
Explenation:
のHibernate Validatorフレームワークは、検証の制約のためにグループをサポートしています。これらは、特定の検証の試行でどのグループを検証するかを検証するために使用されます。あなたはここでそれについてのすべてを読むことができます:
https://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html/validator-usingvalidator.html#example-group-interfaces
を私は私のコード例ではやったことです:
- 2グループ
INPUT
とOUTPUT
- マークの両方のために検証されるユーザープロパティを定義しますグループ
- 入力時にのみ検証されるパスワードプロパティにマークを付ける
RESTのアスペクト(異なる質問)では、通常、入力と出力の検証はインターセプタ(通常はMessageBodyReaderクラスとWriterクラス)によって行われます。これらは、ユーザーの入力を読み、それを書き込む責任があります。そのことについて、ジャージーのドキュメントのページで読むことができます。
ユーザー入力を読み取るときにINPUT
の検証のみを行うことがわかっている独自の検証リーダー/ライターを実装できますが、シリアル化された本体を書き戻すときはOUTPUT
の検証のみです。私はそれが役に立てば幸い
、
アルトゥール