3

在 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;
}
4

2 回答 2

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;
}
于 2012-05-17T15:04:15.230 回答
0

Spring 有一个名为的类HttpMessageConverter,它会为你做这件事。它将获取传入的各种成员HttpServletRequest并使用它们来创建一个对象,然后将其传递给您的Controller方法。最好的部分是,如果您将HttpMessageConverter' 添加到ApplicationContext(通过,在此处AnnotationMethodHandlerAdapter描述)中,它将自动为您执行此操作。

已经存在许多预构建的实现,您可以在HttpMessageConverter上面链接的页面上找到其中的很多。最常用的可能是MappingJacksonHttpMessageConverter,用于将 JSONObject 从请求正文映射到 JavaBean,以及MarshallingHttpMessageConverter,用于将 XML 从请求正文映射到 JavaBean。

于 2012-05-09T13:37:44.697 回答