2012-05-09 6 views
3

в spring3 контроллере я могу создать экшены-метод с несколькими параметров ведьмой будет установлена ​​веснойSpring MVC 3: Определение собственного Datatype-Binding

@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; 
} 
+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

Смежные вопросы