spring mvc 3中的数据绑定,验证,异常

时间:2012-04-09 01:18:34

标签: spring spring-mvc

我正在使用spring mvc3,我发现我对一些概念很困惑,所以我做了一个总结,然后在这里发布。

  1. 数据绑定。
  2. 我之前使用struct2如果我在动作中有一个bean(i..e,名为'Person'),那么当请求下面的url时:

    http://localhost:8080/app/form?person.id=1&person.name=xxx&pet.name=yy

    然后将创建一个新的Person实例,并将参数“1”和“xxx”填充到此实例中。 并且将创建一个新的Pet实例,并将名称'yy'填充到此bean。

    这是struct2中数据绑定的唯一方法: 您在请求中指定了beanname.property。

    现在在spring mvc3中,我知道一种绑定数据的方法:

    http://localhost:8080/app/form?id=1&name=xxx&other=yy

    @RequestMapping('form')
    public String form(Person person,BindingResult result){
        //now I get the person  
    }
    

    即使它有效,但我有一些问题:

    1)我在请求url“name”,“pass”,“other”中有三个参数,spring如何知道应该将哪些参数填充到我的bean(模型)中。

    2)如果我想将参数绑定到多个模型(如struct2中的示例(人和宠物))怎么样?

    此外,spring标记“form”中的modelAttributecommandName属性是什么意思?

    2。验证

    对于bean(忽略示例中的getter和setter):

    import javax.validation.constraints.NotNull;
    
    public class Bean {
        @NotNull(message="id can not be null")
        private int     id;
    }
    

    我使用这个控制器:

    @RequestMapping("val")
    public @ResponseBody
    String validate(@Valid Bean bean, BindingResult result) {
        if (result.hasErrors()) {
            return result.getAllErrors() + "";
        } else
            return "no error";
    }
    

    我发现只有'NotEmpty'有效。 因为如果我使用这个网址:

    /val?name=xxx   ==> no error !! // id is null now,why it does not has error?
    

    第3。类型转换。

    以此网址为例:

    http://localhost:8080/app/form?id=1&name=xxx&other=yy

    如果我将id设置为字符串值,显然会抛出'NumberFormatException'。

    然后在哪里捕获此异常?如果在控制器中,那么我必须在每个控制器中编写这么多的try-catch块。

    此外,类型转换异常不仅限于'NumberFormatException',它可能是'dataformaterrorexception'等。

    但它们都属于类型转换,如何处理使用常见的解决方案?

0 个答案:

没有答案