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

时间:2018-07-19 12:33:01

标签: java validation spring-boot

我有一个这样的表单类:

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类。如何使第一个控制器的名称字段为必需字段,第二个控制器的名称字段为可选字段?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

是的,您可以使用验证组进行操作。请参阅此文档validation-groups-docs

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
}