2012-05-09 91 views
3

在spring3控制器我可以創建一個動作方法有幾個參數巫婆將被Spring設置Spring MVC的3:定義自己的數據類型,綁定

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

我怎麼能教春,以填補我自己定義的數據-Types?

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

這不正是你想要的,但您可能想採取的步驟http://karthikg.wordpress.com/2009/11/08/learn-to-customize-spring -mvc-controller-method-arguments/ –

回答

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

Spring有一個叫做HttpMessageConverter的類,它會爲你做這件事。它將接收傳入的HttpServletRequest的各種成員,並使用它們創建一個對象,然後將該對象傳遞給您的Controller方法。最好的部分是,如果您將HttpMessageConverter添加到ApplicationContext(通過AnnotationMethodHandlerAdapter,描述爲here),它會自動爲您執行此操作。

現在已經有很多預構建的實現,您可以在上面鏈接的HttpMessageConverter頁面上找到它們中的很多。可能最常用的是MappingJacksonHttpMessageConverter,它用於將JSONObject從請求體映射到JavaBean,而MarshallingHttpMessageConverter用於將XML從請求體映射到JavaBean。

+0

似乎不是要搜索的東西,WebArgumentResolver是正確的提示 – mibutec