【问题标题】:Optimal way to construct an instance from an http request parameters从 http 请求参数构造实例的最佳方法
【发布时间】:2013-04-18 17:25:29
【问题描述】:

在我的项目中,我有:

  1. 一个 servlet,它使用用户配置文件信息作为参数来处理 http 请求,即(userName = "Bob" , password = "ugaBaga", address = "blabla"...)

  2. 代表用户信息的用户类。 getters + setters : getName(), setName(String username)....

我的问题是,有没有一种简单的方法可以从 httpRequest 参数创建一个新的用户实例?

类似:

用户 newUser = createUserFromParams(new User(), httpRequestParameters);

(无需为我的 30~ 个字段中的每一个编写:user.setName(parameters.getParameter("userName")))

p.s - 我并没有真正发送密码,我想不出一个字段名。 密码正在通过短信发送;)

提前致谢!

【问题讨论】:

  • 是的,有。例如,当您使用签名 User createUserFromParams (User user, Map<String, String> parameters) 定义辅助函数时!
  • 附注...永远不要在 http 请求中发送密码...
  • @ZackMacomber 那么它将如何到达服务器?可能您的意思是“永远不要通过 GET 请求发送密码”?
  • 因为它应该通过 SSL (https) 发送...我应该说未加密的 http 请求

标签: java jakarta-ee servlets constructor http-request-parameters


【解决方案1】:

有 HttpServletRequest.getParameterMap,但它提供了一个 Map<String, String[]>,因为您可以使用 `?a=1&a=2'。所以像 BeanUtils 这样的东西是行不通的。

但您可以使用 java 反射创建自己的实用程序类,或将请求参数转换为 Map<String, String> 并使用标准 bean 实用程序 (apache)。

【讨论】:

    【解决方案2】:

    Java 生态系统中有几个 MVC 框架可以处理特定问题 - 将请求参数绑定到特定类 - 这是我最喜欢的一个 Spring MVC。根据Spring Site,框架的好处之一是:

    将参数绑定到的命令/表单对象:作为 bean 属性或 字段,具有可自定义的类型转换,取决于 @InitBinder 方法和/或 HandlerAdapter 配置

    因此,使用 Spring Framework 无需手工绑定:Spring 为您完成了这项工作。所以如果你不相信NIH philosofy,你应该尝试一个MVC框架,不管是不是Spring。

    PS:如果您仍然不能使用 MVC 框架,您可以使用 HttpServletRequest.getParameterMap() 和古老的 Apache Commons BeanUtils.populate()(更多信息在 @ 987654323@) 为您制作装订。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多