Spring MVC 3: Define Datatype-Binding Native Binding

in the spring3 controller I can create an action method with several parameters that spring will set

@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale) {
  assert request != null;
  assert locale != null;    
}

How can I teach Spring to populate my own specific data types?

@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale, MyClass myClass) {
  assert myClass != null;
}
+3
source share
2 answers

you must use 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;
    }

} 

and register it in springmvc:

<mvc:annotation-driven >
    <mvc:argument-resolvers>
       <bean class="com.xxx.MyClassWebArgumentResolver" />
    </mvc:argument-resolvers>
</mvc:annotation-driven>

then you can use it in your controller

@RequestMapping(value="/updateTemplate")
public void doStuff(HttpServletRequest request, Locale locale, MyClass myClass) {
    assert myClass != null;
}
+2
source

Spring HttpMessageConverter, . HttpServletRequest , Controller. , , HttpMessageConverter ApplicationContext ( AnnotationMethodHandlerAdapter, ).

, HttpMessageConverter, . , MappingJacksonHttpMessageConverter, JSONObject JavaBean MarshallingHttpMessageConverter, XML JavaBean.

0

All Articles