Spring MVC 3:定义自己的数据类型绑定



在 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。

最新更新