Spring MVC验证 - 都验证REST提交和ad-hoc对象创建

时间:2017-12-11 17:40:07

标签: spring validation spring-mvc

我有一个如下所示的课程:

public class Department {

    @NotNull
    public final List<String> employees;

    @JsonCreator
    public RoleViewWithUserIds(final @JsonProperty("employees") List<String> employees) {
        Preconditions.checkNotNull(employees, "employees");
        this.employees = employees;
    }
}

并希望使用此MVC控制器验证它:

@RequestMapping(value = "", method = RequestMethod.POST)
@ResponseBody
public DepartmentView create(HttpServletRequest request,
                         @RequestBody @Valid Department submission,
                        BindingResult result) {

if (result.hasErrors()) {
    // 400 Bad Request

这个想法是在两种情况下强制执行有效性:

  1. 当用户提交Department(使用BindingResult
  2. 当后端代码在Spring MVC控制器方法之外构造Department对象时(使用构造函数断言)
  3. 不幸的是,我无法在同一个类中看到强制执行这两个约束的方法。有没有办法做到这一点,还是我必须有两种不同的类型?

    编辑:我现在想知道是否有一种方法可以对与提交的对象类型相关的代理对象进行验证,这样就可以像任何其他对象一样创建和验证POJO本身。

1 个答案:

答案 0 :(得分:1)

  1. 当呼叫到达控制器时,let od = document.getElementById('outerDiv'); let ow = od.scrollWidth; let id = document.getElementById('innerDiv'); let iw = id.style.width = ow+"px"; 模型将由update验证,结果将存储在where
  2. 如果您在其他地方创建对象并希望按照CREATE FUNCTION add_update_dates() RETURNS TRIGGER LANGUAGE plpgsql AS $$ BEGIN IF (OLD.news_name IS DISTINCT FROM NEW.news_name OR OLD.news_description IS DISTINCT FROM NEW.news_description OR OLD.news_text IS DISTINCT FROM NEW.news_text ) THEN NEW.news_update_date := current_date; NEW.news_update_time := current_time; END IF; RETURN new; END; $$; 注释验证对象:这不能在对象创建时自动完成,但是,创建它的代码可以通过某些东西手动验证它像这样:

    Department
  3. 验证结果现在将存储在@Valid

    因此,使用构造函数断言的唯一方法是将bindingResult的实例作为构造函数的参数并在那里断言。