有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSpringMVC3:定义自己的DatatypeBinding

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

共 (2) 个答案

  1. # 1 楼答案

    你应该使用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;
    }
    
  2. # 2 楼答案

    Spring有一个名为^{}的类,它将为您实现这一点。它将获取传入HttpServletRequest的各种成员,并使用它们创建一个对象,然后将该对象传递给Controller方法。最好的部分是,如果将HttpMessageConverter添加到ApplicationContext中(通过AnnotationMethodHandlerAdapter,如here所述),它将自动为您执行此操作

    已经存在许多预构建的实现,您可以在上面链接的HttpMessageConverter页面上找到很多。最有用的可能是^{},用于将JSONObject从请求体映射到JavaBean;以及^{},用于将XML从请求体映射到JavaBean