【问题标题】:Hire Spring MVC databinderHire Spring MVC 数据绑定器
【发布时间】:2012-12-23 10:14:00
【问题描述】:

我在这里阅读了关于 spring 数据绑定器的很好的全面解释:https://stackoverflow.com/a/3705855/1828986

我的问题需要更多知识,让我强调一下:

我有具有复杂字段的 Person 对象 - 例如与街道和号码字段联系。所以我们可以这样描述:

public class Contact {
    private String street;
    private int number;
// setters & getters
};
public class Person {
    private String name;
    private int age;
    private Contact contact;
// setters & getters
};

我认识到 spring 将其表示为 html 表单作为以下输入字段:
姓名、年龄、contact.street、contact.number

我假设,它可以在取回时将其放回 Person 对象。

我想“雇用”spring binder 来为我提供的文本数据创建对象(不是 HttpRequest 对象)。 例如我有文件:

name       age        street       number
John       22         MHDrive      2187
Will       32         MHDrive      3212

我可以提供上面的任何结构并想要获取 Person 对象:)

例如

Person p = springBinderSomething({{"name","John"},{"age","22"},{"street","MHDrive"},{"number","2187"}}, Person.class);

任何帮助表示赞赏
谢谢
萨拉姆

【问题讨论】:

    标签: java spring spring-mvc model-view-controller


    【解决方案1】:

    在这种情况下,听起来您想直接使用DataBinder 类。您应该能够实例化 DataBinder 的实例,传递要绑定到的对象的实例,然后调用 bind(PropertyValues) 方法进行绑定。 Spring MVC 通常会为您实例化您的类的新实例,但如果您直接调用 DataBinder,则需要将实例化实例传递给它。 ServletRequestDataBinder 在后台创建MutablePropertyValues 的实例,它使用来自请求的参数值填充该实例,然后传递给#bind(PropertyValues) 方法。在您的情况下,您可能希望自己创建一个新实例并直接使用您的数据而不是从请求中填充它。如果您在现有对象中有可用的数据,则 MutablePropertyValues 有许多构造函数,否则您可以使用您的名称和值调用 #add(String, Object) 方法。

    Person person = new Person();
    DataBinder dataBinder = new DataBinder(person);
    MutablePropertyValues mpv = new MutablePropertyValues();
    mpv.add("name", "John Doe");
    mpv.add("age", 25);
    mpv.add("contact.street", "1st Street");
    mpv.add("contact.number", 12345);
    dataBinder.bind(mpv);
    

    【讨论】:

    • 注意到,没有调用验证器。有什么方法可以应用默认的 spring 验证器吗?
    • 检查 Validator documentation 与 DataBinders 如何对绑定对象执行验证。
    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 2011-10-23
    • 2015-09-01
    • 1970-01-01
    • 2014-09-02
    • 2023-03-03
    • 1970-01-01
    • 2014-09-05
    相关资源
    最近更新 更多