我在这里阅读了有关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对象。

我想“租用”弹簧活页夹为我提供的文本数据创建对象(而不是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);


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

最佳答案

在这种情况下,听起来您想直接使用DataBinder类。您应该能够实例化DataBinder实例,并传递要绑定的对象的实例,然后调用bind(PropertyValues)方法进行绑定。 Spring MVC通常会为您实例化类的新实例,但是如果直接调用DataBinder,则需要将其传递给实例化的实例。 ServletRequestDataBinder在幕后创建MutablePropertyValues的实例,并使用请求中的参数值填充该实例,然后传递到#bind(PropertyValues)方法。在您的情况下,您可能需要自己创建一个新实例,并直接使用数据而不是从Request中填充它。如果现有对象中有可用数据,则有许多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);

07-28 13:23
查看更多