长话短说,我试图将作为请求一部分发送的所有参数映射到自定义类。
custom.class
public class data
{
private String a;
private String b;
public String GetA()
{
return this.a;
}
public String SetA(String a)
{
this.a = a;
}
public String GetB()
{
return this.a;
}
public String SetB(String b)
{
this.b = b;
}
}
现在我可以访问这样的参数:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
request.getParameter("a");
request.getParameter("b");
}
但正如我上面提到的,我希望将所有参数加载到类对象中。
我认为最好的方法是将参数转换为地图对象,然后以某种方式使用我们从地图对象中检索的所有值来评估类对象。 但是我不知道如何实现这一目标。
所以我真的很感激,如果有人能指出我的文件或建议我怎么能这样做?
为我糟糕的英语道歉。
提前致谢, 亚历
答案 0 :(得分:1)
HttpRequest
上有一个方法可以将参数作为地图获取,this可以使用哪些方法?您可以遍历参数映射,并为每个条目填充自定义类
YourDataClass data = new YourDataClass();
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> entry : map.entrySet()) {
// do whatever you need
data.addParam(entry.getKey(), entry.getValue());
}
答案 1 :(得分:1)
我知道这有点旧,但我偶然发现了一个类似的问题,我提出了一个相当简单的解决方案。
我的方法是使用google gson实现来获取具有简单字符串属性的Json对象,然后可以将其解析为您选择的对象(再次使用gson)。它将创建的Json对象的键值对映射到对象(如果存在)。所以它实际上非常通用,可以调整到任何类型的对象,而不需要自制的属性到属性映射。
让我们假设你有一个目标对象,你想要包装你的请求参数,看起来像这样:
public class RequestInfo {
private String a;
private String b;
public RequestInfo() {
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
您的HTTPServletRequest具有此花式参数映射,其中包含键和值。这个值是一个String数组,我真的不能告诉你原因,但在我的情况下,我只假设我所拥有的每个属性只产生一个可能的值,这就是为什么我只使用它的第一个条目。 这个想法很简单:创建一个空的Json对象,遍历参数映射并在Json对象中创建键值对。我们来看看:
// create an empty json object
JsonObject requestJson = new JsonObject();
// iterate over all the paramters
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
// add every item as a property to the json
requestJson.addProperty(entry.getKey(), entry.getValue()[0]);
}
现在你有一个非常简单的Json对象,所有的请求参数都被映射为String类型的键值对。最后,让gson将此对象解析为您自己的表示形式。一行代码,仅此而已:
// let Gson parse the Json to your own object
RequestInfo info = new Gson().fromJson(requestJson, RequestInfo.class);
现在您将所有匹配的参数解析为您自己的对象。请注意,Gson还能够识别不同的Object类型并正确解析它们。因此,即使我们只在Json对象中创建String键值对,如果您指定了这样的对象,gson也能够将它们解析为Integers,Longs等。
现在,如果您的请求信息对象发生变化,您不必更新任何匹配的算法以及其他案例,if-else结构或更新的构造函数,gson将为您处理它。而且,如果你想要映射不同类型的请求,你几乎可以使用相同的算法,你只需要在fromJson调用中更新类定义。
希望这有用。
答案 2 :(得分:0)
如果我理解你,你应该在你的数据类中做一个构造函数,它将a,b作为参数:
public data(String aa, String bb){
a = aa;
b = bb;
}
然后你可以在你的doPost()方法中调用你的构造函数:
data d = new data(request.getParameter("a"), request.getParameter("b"));