POJO内にSpring @RequestParam
注釈がなくても、実際にはかなりシンプルです。あなたが探しているのは、カスタムWebArgumentResolver
です。ここでは完全な例である:
@Service
public class UserArgumentResolver implements WebArgumentResolver {
@Override
public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
if (methodParameter.getParameterType() == User.class) {
return new User(webRequest.getParameter("user"));
}
return WebArgumentResolver.UNRESOLVED;
}
}
コードはかなり自明です:ハンドラのパラメータの一つは、User
型である場合、user
という名前のリクエストパラメータを取得し、あなたが(もちろん、それはUser
に割り当て可能でなければならない欲しいものは何でも返します。WebArgumentResolver.UNRESOLVED
リゾルバは、このパラメータを処理することができなかったとその後のリゾルバが検証されなければならないことを意味し
残念ながらリゾルバは、デフォルトでは取り上げていない、それは登録する必要があります。
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="customArgumentResolver" ref="userArgumentResolver"/>
</bean>
<mvc:annotation-driven />
これだけです!あなたのハンドラは、次のようになります。
@RequestMapping
public void handle(User user) {
//...
}
-1:そうでない場合、SpringはPOJO Beanプロパティの名前に基づいてPOJOにバインドします。 @ JBの答えを見てください。 – skaffman