使用POJO的Spring MVC和处理程序方法

时间:2011-07-08 15:51:15

标签: spring servlets spring-mvc pojo

Spring MVC允许定义用适当的值填充的handler methods with a variety of parameters

是否可以使用相同的方法将值填入POJO,然后传递给处理程序方法?

目前,我必须这样做:

@RequestMapping
public ModelMap handle( @RequestParam("user") String user, ... )

我想做什么:

class HandlerPojo {
    @RequestParam("user") String user;
    ...
}

@RequestMapping
public ModelMap handle( HandlerPojo pojo )

3 个答案:

答案 0 :(得分:4)

您链接的文档说:

  

带注释的处理程序方法   与@RequestMapping可以有非常   灵活的签名。 [...]

     
      
  • 命令或   form对象将参数绑定到:as   bean属性或字段,用   可自定义的类型转换[...]
  •   

您不能像在示例中那样在POJO的属性/字段上使用@RequestMapping批注,但如果POJO的属性名称映射参数名称,则POJO将被实例化并由Spring正确填充。

答案 1 :(得分:2)

实际上非常简单,即使在POJO中没有任何Spring @RequestParam注释也是如此。您要找的是自定义WebArgumentResolver。这是一个完整的例子:

@Service
public class UserArgumentResolver implements WebArgumentResolver {
    @Override
    public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
        if (methodParameter.getParameterType() == User.class) {
            return new User(webRequest.getParameter("user"));
        }
        return WebArgumentResolver.UNRESOLVED;
    }
}

代码是不言自明的:如果其中一个处理程序参数是User类型,则检索名为user的请求参数并返回您想要的任何内容(当然它应该可以分配给{{1} } {。{1}}表示解析器无法处理此参数,应检查后续解析器。

不幸的是,默认情况下不会选择解析器,必须注册:

User

就是这样!你的处理程序现在看起来像这样:

WebArgumentResolver.UNRESOLVED

答案 2 :(得分:0)

这是不可能的,@ RequestMapping正在提取请求中指定的参数并将其值分配给java变量。您无法在请求中传递pojo,因为客户端上不存在pojo。也许看看将一些json传回去并使用jackson或gson将其反序列化为pojo。