程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在MultiActionController中执行Spring验证?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在MultiActionController中执行Spring验证??

开发过程中遇到如何在MultiActionController中执行Spring验证?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在MultiActionController中执行Spring验证?的解决方法建议,希望对你解决如何在MultiActionController中执行Spring验证?有所启发或帮助;

让我们写以下

public class Person {

    private String name;
    private Integer age;

    public Integer getAge() {
        return age;
    }

    public voID setAge(Integer age) {
        this.age = age;
    }

    public String getname() {
        return name;
    }

    public voID setname(String name) {
        this.name = name;
    }

}

还有你的MultiActionController

import static org.springframework.valIDation.ValIDationUtils.*;

@Component
public class PersonController extends MultiActionController {

    public PersonController() {
        setMethodnameResolver(new InternalPathMethodnameResolver());

        setValIDators(new ValIDator[] {new ValIDator() {
            public boolean supports(Class clazz) {
                return clazz.isAssignableFrom(Person.class);
            }

            public voID valIDate(Object command, Errors errors) {
                rejectIfEmpty(errors, "age", "", "Age is required");
                rejectIfEmptyOrWhitespace(errors, "name", "", "name is required");
            }

        }});
    }

    public ModelAndVIEw add(httpServletRequest request, httpServletResponse response, Person person) throws Exception {
        // do something (save our Person object, for instance)

        return new ModelAndVIEw();
    }

}

MultiActionController定义了一个称为 验证器 的属性,您应在其中提供MultiActionController使用的任何验证器 。在这里您可以看到一段代码,该代码负责验证MultiActionController中的Command对象

ServletRequestDataBinder binder = ...

if (this.valIDators != null) 
    for (int i = 0; i < this.valIDators.length; i++) {
        if (this.valIDators[i].supports(command.getClass())) {
    ValIDationUtils.invokeValIDator(this.valIDators[i], command, binder.getBindingResult());
        }
    }
}

/**
  * Notice closeNoCatch method
  */
binder.closeNoCatch();

closeNoCatch方法说

因此,如果您的验证器返回任何错误,closeNoCatch将抛出@L_502_3@。 ,您可以在MultiActionController方法中捕获它,如下所示

public ModelAndVIEw hanldeBindException(httpServletRequest request, httpServletResponse response, ServletRequestBindingException bindingException) {
    // do what you want right here

    BindException bindException = (BindException) bindingException.getRootCause();

    return new ModelAndVIEw("personValIDatorVIEw").addAllObjects(bindException.getModel());
}

为了测试,让我们做以下一个

@Test
public voID failureValIDation() throws Exception {
    MockhttpServletRequest request = new MockhttpServletRequest();
    request.setMethod("POST");
    request.setRequestURI("http://127.0.0.1:8080/myContext/person/add.HTML");

    /**
     * Empty values
     */
    request.addParameter("name", "");
    request.addParameter("age", "");

    PersonController personController = new PersonController();

    ModelAndVIEw mav = personController.handleRequest(request, new MockhttpServletResponse());

    BindingResult bindingResult = (BindingResult) mav.getModel().get(BindingResult.MODEL_KEY_PREFIX + "command");

    /**
     * Our ValIDator rejected 2 Error
     */
    assertTrue(bindingResult.getErrorCount() == 2);
    for (Object object : bindingResult.getAllErrors()) {
        if(object instanceof FIEldError) {
            FIEldError fIEldError = (FIEldError) object;

            System.out.println(fIEldError.getFIEld());
        }
    }
}

解决方法

如何在中执行Spring验证MultiActionController

大佬总结

以上是大佬教程为你收集整理的如何在MultiActionController中执行Spring验证?全部内容,希望文章能够帮你解决如何在MultiActionController中执行Spring验证?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: