我有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 。< / p>
这里的问题是spring JSR303验证支持正在验证一个字段,即 createdBy ,我不想通过spring mvc验证。
如何指示spring mvc在使用 @Valid 注释时不要验证这些可选字段。
有没有办法可以使用spring mvc跳过这样的字段?
答案 0 :(得分:2)
验证主要针对用户输入。由于您将自己设置createdBy
,因此请在保存之前执行此操作(例如@PrePersist),或将新日期作为默认值。如果需要为createBy强制执行约束,则可以在架构级别执行此操作。
@Column(nullable=false, ...)
private String createdBy = new Date();
答案 1 :(得分:1)
您需要阅读Validation Groups。这允许您根据“方案”
使用Spring的@Validated注释来使用组
如果不保护createdBy字段,用户可以通过更改POST变量来更改它。请参阅DataBinder.setDisallowedFields()
从概念上讲,引脚如何与地址相关?
听起来你想在这里使用一个Form Backing Object(一个仅为表单制作的常规非JPA POJO),并将值复制到你的真实实体。