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 )
答案 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。