代码之家  ›  专栏  ›  技术社区  ›  Michal Milicua

是否可以在没有@EnableWebMvc和WebMVCConfigureAdapter的情况下配置自定义参数解析器

  •  0
  • Michal Milicua  · 技术社区  · 6 年前

    上下文

    RESTAPI作为Spring boot 1.5.3项目实现,没有 @EnableWebMvc

    目标

    对于每个API调用,创建一个UUID字符串,并将其注入控制器方法以进行审计(UUID用于响应体和日志记录)。应按如下方式使用:

    @PostMapping("/reserveCredits")
    public ResponseEntity<Result> reserveCredits(String uuid) {
        ...
        ... new Result(uuid) ... 
    

    @Configuration
    @EnableWebMvc
    public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(new MyCustomArgumentResolver());
        }
    }
    

    问题

    我的整个项目只使用REST控制器。我目前没有使用 @EnableWebMvc 我现在不想介绍它,因为它可能与我现有的配置冲突。当我尝试使用。。。

    @Autowired
    private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
    

    @Configuration 我得到了豆子 BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping' 由于 ServletContext is required .

    问题

    1. @EnableWebMvc ?
    2. 我是否可以添加自定义参数解析器而不使用 ?
    3. 正在使用 @EnableWebMvc 高度推荐,我应该在我的代码中改进它吗?
    4. 我应该选择其他解决方案吗?

    替代方案

    • 覆盖方法参数值的侵入性AOP
    • HandlerInterceptor,它将uuid添加到请求参数并更新响应正文
    1 回复  |  直到 6 年前
        1
  •  0
  •   Michal Milicua    6 年前

    答案基于@M.Denium的评论:

    是的,没有它是可能的 @EnableWebMvc . 通过扩展 WebMvcConfigurerAdapter 没有回归影响的风险。 RequestMappingHandlerAdapter 不必自动连接到config类中。

    @Configuration
    public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(new MyCustomArgumentResolver());
        }
    }