创建自动填充HttpServletRequest的自定义控制器参数?

时间:2013-10-29 17:15:04

标签: spring-mvc

使用严格基于注释的/仅Java的Spring MVC 3.2.2配置,我正在尝试使用自定义类(我将其称为Context)作为参数创建一个控制器方法。我希望Context使用当前HttpServletRequest的知识构建,然后传递给控制器​​方法。本质上,我想在将请求对象发送到控制器之前创建自己的自定义包装器。例如我想完成这个:

@Controller
@RequestMapping(value = "/")
public class MainController {

    @RequestMapping(value = "/")
    public @ResponseBody
    String process(HttpServletRequest request) {
        Context context = new Context(request);
        ...
    }

}

自动像这样:

@Controller
@RequestMapping(value = "/")
public class MainController {

    @RequestMapping(value = "/")
    public @ResponseBody
    String process(Context context) {
        ...
    }

}

这可能吗?我考虑在HandlerMethodArgumentResolver中将@Bean作为WebMvcConfigurerAdapter实施,但我认为这不是正确的选择。我尝试将@AutoWired添加到Context(作为@Bean)也无济于事。我想有WebMvcConfigurerAdapter或可能在AbstractAnnotationConfigDispatcherServletInitializer

1 个答案:

答案 0 :(得分:0)

HandlerMethodArgumentResolverWebMvcConfigurerAdapter无疑是实现目标的正确方法。

要注册自定义参数解析器,您需要使@Configuration扩展WebMvcConfigurerAdapter并覆盖其addArgumentResolver()方法。