验证实体中的字段而不验证参数

时间:2015-04-16 22:46:36

标签: java spring validation asp.net-web-api

我有一个类似于以下

的实体对象
@Document(collection = "job")
public class Job {
    @Id
    private String id;

    private JobStatus status;

    @NotBlank
    private String term;

    ...standard getters/setters
}   

我有一个像这样的控制器:

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Job> createJob(@RequestBody @Valid Job job) {
    ...store the new job in the database
}

在存储到数据库之前,Job.status属性由代码设置。将忽略createJob方法的请求主体中包含的任何“status”属性。

我想在作业写入数据库时​​验证Job.status不为null,但不要求用户在请求正文中包含状态。如果我使用@NotNull注释Job.status属性,则除非我包含“status”,否则请求正文的验证将失败。

如何仅在持久保存到数据存储而不是作为请求正文的一部分时验证状态字段?

1 个答案:

答案 0 :(得分:0)

您尝试将数据库实体用作具有不同验证规则的UI实体。你有选择:

  • 为UI和数据库使用不同的类
  • 为您的not null创建一个自定义JSR-303验证器,在UI层验证时以某种方式避免应用
  • 在数据库本身中放入非null的约束,而不是hibernate / JPA并处理约束异常