2

Address エンティティを保存するための spring4 mvc アプリケーションがあります。コード ビットは次のとおりです。

私のコントローラー

@RequestMapping(value = "addAddress", method = POST)
public String registerComplaint(@Valid @ModelAttribute final Address address, final BindingResult resultBinder) {
    if (resultBinder.hasErrors())
        return "addAddress";
     addressService.addAddress(address);
    return "redirect:myAddress";
}

私のエンティティ

@Entity
@Table(name = "address")
public class Address {
  @NotNull
  private String street;

  @NotNull
  private String pin;

  @NotNull
  private String createdBy;

  ........
}

私のフォームは、ストリートピンのみをフィールドとして含みます。ここで、createdByは、他のフォーム値を検証した後に設定する必要があります。

ここでの問題は、Spring JSR303 検証サポートが、Spring MVC で検証したくないフィールド、つまりcreatedByを検証していることです。

@Validアノテーションを使用しているときに、これらの種類のオプション フィールドを検証しないように spring mvc に指示するにはどうすればよいですか。

spring mvc を使用してこのようなフィールドをスキップする方法はありますか?

4

2 に答える 2

2

検証は主にユーザー入力用です。自分で設定するcreatedByので、保存する前に設定するか ( @PrePersist など)、新しい Date をデフォルト値として設定します。createBy に制約を適用する必要がある場合は、スキーマ レベルで実行できます。

@Column(nullable=false, ...)
private String createdBy = new Date();
于 2015-02-10T12:31:04.340 に答える
1
  1. Validation Groupsを読む必要があります。これにより、「シナリオ」に応じて異なるバリデーターを使用できます

  2. Spring の@Validatedアノテーションを使用してグループを使用する

  3. createdBy フィールドを保護しない場合、ユーザーは POST 変数を変更することでフィールドを変更できます。DataBinder.setDisallowedFields()を参照してください。

  4. 概念的に、ピンはアドレスにどのように関連していますか?

ここで Form Backing Object (フォーム専用に作成された通常の非 JPA POJO) を使用し、実際のエンティティに値をコピーしたいようです。

于 2015-02-10T18:01:02.593 に答える