2

我有 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验证支持正在验证一个字段,即createdBy,我不想通过spring mvc进行验证。

我如何指示 spring mvc 在使用@Valid注释时不要验证这些可选字段。

有什么办法可以使用 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. 从概念上讲,pin 与地址有什么关系?

听起来您想在此处使用表单支持对象(仅用于表单的常规非 JPA POJO),并将值复制到您的真实实体。

于 2015-02-10T18:01:02.593 回答