用于检索HttpServletRequest参数的Java库
我正在开发一个使用用于检索HttpServletRequest参数的Java库,java,jakarta-ee,web,Java,Jakarta Ee,Web,我正在开发一个使用servlet的应用程序。老板要求我不要使用Struts2或JSF或SpringMVC,而只使用servlet和jsp。在我的Servlet中,我需要调用request.getParameter(“parameterName”)来检索参数值。 我的问题 是否存在一个Java库,我可以将JavaBean和HttpServletRequest对象传递给并返回一个填充的JavaBean。i、 e.JavaBean自动填充请求参数。来自Ignite Realtime的Jive软件有一个
servlet
的应用程序。老板要求我不要使用Struts2或JSF或SpringMVC
,而只使用servlet和jsp
。在我的Servlet
中,我需要调用request.getParameter(“parameterName”)
来检索参数值。
我的问题
是否存在一个Java库,我可以将
JavaBean
和HttpServletRequest
对象传递给并返回一个填充的JavaBean
。i、 e.JavaBean
自动填充请求参数。来自Ignite Realtime的Jive软件有一个BeanUtils类,似乎可以执行您想要的操作。它是开源的。我从来没用过。它在OpenFire下载中。我通常对任何类型的JavaBean反射内容都会有一个合适的方法:
public void填充(对象bean,
地图属性)
抛出非法访问异常,
InvocationTargetException
根据
指定的名称/值对。此方法使用Java反射API来
识别相应的“属性设置器”方法名称,并处理
字符串、布尔、int、long、float和
双重的此外,这些类型(或
还可以识别相应的基元类型
要为每个属性调用的特定setter方法是
使用常用的JavaBeans内省机制确定。因此
您可以使用一个
与bean本身的类相关联。如果没有这样的信息
类可用,标准方法名称转换(“set”加上
使用所涉及财产的大写名称)
注意:与JavaBeans规范相反的是,拥有超过
一个setter方法(具有不同的参数签名)用于相同的
财产
警告-此方法的逻辑是为提取而自定义的
HTTP请求中基于字符串的请求参数。可能是的
不是使用类型转换进行常规属性复制所需的。
为此,请检查copyProperties()方法
请注意,它是为从HTTP请求中提取基于字符串的请求参数而定制的,因此它正是您想要的。问题是HTTP请求参数以映射的形式出现,需要从数组中展开
我做了一个快速测试,以确保它按预期工作。我注意到类必须是公共的
,并且在它自己的文件中,这样内省才能起作用
我创建了一个JavaBean,如下所示:
public class JavaBean {
String userName;
String password;
Integer id;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
并将以下内容用于快速测试:
public static void main(String[] args) throws Exception {
final Map<String, String[]> params = new HashMap<>();
params.put("userName", new String[]{"userA"});
params.put("password", new String[]{"secrect"});
params.put("id", new String[]{"10"});
final JavaBean javaBean = new JavaBean();
BeanUtilsBean.getInstance().populate(javaBean, params);
System.out.println(javaBean.getUserName());
System.out.println(javaBean.getPassword());
System.out.println(javaBean.getId());
}
我还注意到,它似乎不喜欢数值属性的int
——似乎期望一个Integer
JavaBean能让您做什么,而HttpServletRequest
不能?@DavidWallaceJavaBean
将包含发送到后端的表单字段。提交表单时,我想通过调用API来填充这个JavaBean
,我正在寻找的库将提供HttpServletRequest
对象。你是说你正在使用某种需要bean的ORM工具吗?@Boris,是的,我想可能就是这样。只是检查一下。没有必要提供一个与OP实际想要的答案不匹配的答案。是的,谢谢eric,我读了你的问题。有一个可以满足你需要的。请你发布一个指向Util类的链接。这是开源的吗?
userA
secrect
10