在spring3控制器中我可以创建一个动作方法,其中有几个参数将由spring设置
@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;
}
答案 0 :(得分:2)
你应该使用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;
}
答案 1 :(得分:0)
Spring有一个名为HttpMessageConverter
的类,它将为您做到这一点。它将使用传入的HttpServletRequest
的各个成员并使用它们来创建一个对象,然后将其传递给您的Controller
方法。最好的部分是,如果您将HttpMessageConverter
添加到ApplicationContext
(通过AnnotationMethodHandlerAdapter
,描述为here),它会自动为您执行此操作。
已经存在许多预先构建的实现,您可以在上面链接的HttpMessageConverter
页面上找到很多实现。可能最常用的是MappingJacksonHttpMessageConverter
,用于将JSONObject从请求主体映射到JavaBean,MarshallingHttpMessageConverter
,用于将XML从请求主体映射到JavaBean。