gpt4 book ai didi

java - 将 request.getParameterMap() 转换为带有对象列表的 bean

转载 作者:太空宇宙 更新时间:2023-11-04 09:52:15 25 4
gpt4 key购买 nike

我想将表单数据直接转换为bean。最初我使用 spring 来实现这一点,但在我当前的项目中,我们不允许再使用 spring,所以我尝试在 Apache BeanUtils 的帮助下做类似的事情。我的 bean 看起来像这样:

public class MyBean {
private String foo;
private String bar;
private List<FooBar> fooBars;
}
public class FooBar {
private int id;
}

提交表单后,request.getParameterMap() 方法会给出以下 map :

"foo" : "Some text",
"bar" : "Other text",
"foobars[0].id" : "1",
"foobars[1].id" : "2",
"foobars[2].id" : "3"

我用于转换的代码如下所示:

MyBean bean = new MyBean();
BeanUtils.populate(bean, request.getParameterMap());

使用 Spring Data Binder,将这些值转换为 bean 是没有问题的,但点符号在某种程度上不适用于 BeanUtils。有谁知道输入必须是什么样子,以便 BeanUtils 可以将 foobars 转换为对象列表?或者也许您知道另一个有能力实现这一点的库?

最佳答案

BeanUtils.populate 似乎不支持嵌套属性:

This method uses Java reflection APIs to identify corresponding "property setter" method names, and deals with setter arguments of type String, boolean, int, long, float, and double. In addition, array setters for these types (or the corresponding primitive types) can also be identified.

我找到了另一个方法,BeanUtils.copyProperties ,这里指定的是

If the origin "bean" is actually a Map, it is assumed to contain String-valued simple property names as the keys.

所以我猜你无法使用 BeanUtils 来做到这一点。但我可能有一个解决方案,使用PropertyUtils。该类有很多静态方法,其中有:

我还没有尝试过,但这是一种可能的方法:

MyBean bean = new MyBean();
for (Map.Entry<String, String> entry : request.getParameterMap())
{
try {
PropertyUtils.setProperty(bean, entry.getKey(), entry.getValue());
}
catch (NoSuchMethodException exc) {
PropertyUtils.setNestedProperty(bean, entry.getKey(), entry.getValue());
}
}

我不知道从StringInteger的转换是否是自动的。让我知道。

关于java - 将 request.getParameterMap() 转换为带有对象列表的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54571788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com