Spring boot-NotEmpty注释仅适用于特定控制器



我有一个这样的表单类:

public class ProjectForm {
@NotEmpty
private String name;
@NotEmpty
private String desription;
// getters and setters
}

此表单用于创建和编辑将保存在数据库中的Project对象。

我有两个不同的控制器用于创建和编辑项目对象。

@PostMapping("/projects/edit/{id}")
public String editProject(@Valid ProjectForm projectForm, BindingResult bindingResult, @PathVariable("id") String id) {
//Controller code here
}

@PostMapping("/projects/new")
public String addProject(@Valid ProjectForm projectForm, BindingResult bindingResult) {
//Controller code here
}

如您所见,两个控制器都使用ProjectForm类。如何使第一个控制器的名称字段为必填字段,使第二个控制器的姓名字段为可选字段?

您将两个方法都命名为editProject,但我认为只有第一个用于编辑。作为一种解决方案,您可以创建另一个仅用于编辑的类,而无需使用@NotEmpty注释,例如ProjectFormWrapper。除此之外,如果您正在编辑一个对象,请不要使用POST,而是使用PUT。

是的,你可以使用validation-groups来完成。请参阅本文档验证组文档

public interface FirstValidation{
}

public class ProjectForm {
@NotEmpty(groups = {FirstValidation.class},message = "Name can not be empty")
private String name;
@NotEmpty
private String desription;
// getters and setters
}

@PostMapping("/projects/edit/{id}")
public String editProject(@Validated(FirstValidation.class) ProjectForm projectForm, BindingResult bindingResult, @PathVariable("id") String id) {
//Controller code here
}
@PostMapping("/projects/new")
public String addProject(@Valid ProjectForm projectForm, BindingResult bindingResult) {
//Controller code here
}