在 spring3 控制器中 我可以创建一个具有多个参数的操作方法 女巫将由弹簧设置
@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale) {
assert request != null;
assert locale != null;
}
如何教 Spring 填充我自己定义的数据类型?
@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale, MyClass myClass) {
assert myClass != null;
}
使用 WebArgumentResolver
public class MyClassWebArgumentResolver implements WebArgumentResolver {
public Object resolveArgument(MethodParameter param, NativeWebRequest req) throws Exception {
if (param.getParameterType().equals(MyClass.class)) {
MyCLass obj = new MyClass();
....
return obj;
}
return UNRESOLVED;
}
}
并将其注册到SpringMVC:
<mvc:annotation-driven >
<mvc:argument-resolvers>
<bean class="com.xxx.MyClassWebArgumentResolver" />
</mvc:argument-resolvers>
</mvc:annotation-driven>
然后您可以在控制器中使用它
@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale, MyClass myClass) {
assert myClass != null;
}
Spring 有一个名为 HttpMessageConverter
的类,它将为您执行此操作。 它将获取传入HttpServletRequest
的各种成员,并使用它们创建一个对象,然后将该对象传递给Controller
方法。 最好的部分是,如果您将HttpMessageConverter
添加到ApplicationContext
中(通过 AnnotationMethodHandlerAdapter
,这里描述),它会自动为您执行此操作。
已经存在许多预构建的实现,您可以在上面链接的HttpMessageConverter
页面上找到其中的很多。 可能最有用的是MappingJacksonHttpMessageConverter
,它用于将JSONObject从请求体映射到JavaBean,以及MarshallingHttpMessageConverter
,用于将XML从请求体映射到JavaBean。