2017-07-10 9 views
1

Hibernateを使用してグループ検証を作成する手順を理解できません。誰でも助けてください。私は、次のステップを取る公式休止状態のドキュメントを使用して、両方のクラスからいくつかのフィールドをグループ化し、検証する必要があり、データベースからの2つのクラスがありますHibernate検証を使用してグループ検証を作成する手順

public class Tickets implements Serializable { 
    @NotNull(groups=GroupLotsAndTicketsValidation.class) 
    @Size(groups = GroupLotsAndTicketsValidation.class) 
    @NotBlank 
    private string Amount; 
    //and other fields.. 
    //getters and setters 
    } 

これが私の最初のクラスだった: は、私はフィールドを持つ2つのクラスを持っていると仮定します。ここには二番目のものがあります:

public class Lots implements Serializable { 

@NotNull(groups = GroupLotsAndTicketsValidation.class) 
@Size(groups = GroupLotsAndTicketsValidation.class) 
@NotBlank(groups =GroupLotsAndTicketsValidation.class) 
private String title; 
@NotNull(groups = GroupLotsAndTicketsValidation.class) 
@NotBlank(groups =GroupLotsAndTicketsValidation.class) 
private String fullWeight; 
//and other fields.. 
//getters and setters... 
    } 

これは私の2番目のクラスでした。 また、クラスごとに1つのインターフェイスを作成する必要があることを読んでいます。しかし、私は思うように私は自分の注釈を作成したい場合はそれを行う必要があります。 インターフェイスを作成する必要があります。事前に感謝します

+0

あなたの質問は重複しているようです。最初の1つは[ここ](https://stackoverflow.com/a/24712365/5728095)に回答しました – Sergii

+0

@Sergiiはリンクに感謝しますが、私は正確なステップが必要です。それ。理解に感謝。 P.S.そのリンクの中で、彼はクラスGroupOne.classとGroupTwoをどこに持っているのかを見せていませんでした。クラス –

答えて

1

グループインターフェイスは実装のためではありません。これは検証の指標です。このマーカーはテストで使用できます。春のような強力なフレームワークを使用する場合は、マーカー@Controllerまたは任意のBeanレベルでマーカーを使用できます。

たとえば、あなたはエンティティを持っていますProfile

残りのAPIでは、POST(作成)とPUT(更新)の操作が必要です。だから、あなたは(例えばのみ、この場合は、有効なIDキーは、Java側で管理されている場合の動作を作成するために)使用する前に、更新操作をid値を配置する必要が実体で

@RestController 
public class ProfileController { 
    @PostMapping("/profile") 
    public Calendar insert(@RequestBody @Valid Profile profile) { 
    return null; // implement me 
    } 
    @PutMapping("/profile/{profileId}/") 
    public void update(@PathVariable String profileId, @RequestBody @Valid Profile profile) { 
    // todo implement me. 
    } 
} 

を持っています。したがって、検証ロジックにnullであってはなりません。

public class Profile { 
    @Id 
    @NotNull 
    private Long id; 
    private String name; 
    @NotNull 
    private String email; 
} 

これを使用しようとすると、作成操作でui nonNull制約の例外が発生します。 ID notNull検証は作成操作では必要ありませんが、更新操作では不要です。解決策の一つは、他の、独自の検証と異なるDTOオブジェクトを作成することである - idフィールドから検証を削除し、別の溶液を使用することである。

public class Profile { 
    @Id 
    @NotNull(groups = UpdateOperation.class) 
    private Long id; 
    private String name; 
    @NotNull 
    private String email; 
} 

public interface UpdateOperation {} 

及び(@Valid(JSR-303)コントローラに変更を加える移行する必要があり

@PostMapping("/profile") 
    public Calendar insert(@RequestBody @Validated Profile profile) { 
    return null; // implement me 
    } 
    @PutMapping("/profile/{profileId}/") 
    public void update(@PathVariable String profileId, @RequestBody @Validated({UpdateOperation.class}) Profile profile) { 
    // todo implement me. 
    } 

としては休息操作ごとにDTOを作成する必要はありません。その結果、あなたの残りの部分のレベルで柔軟な検証を持っている:)検証グループバネが@Validatedを提供してサポートしているバリデータのアノテーションへ。

はまた、私はあなたがすでに赤願っています:

+0

ありがとうございました –

関連する問題