是否可以在没有@EnableWebMvc和WebMvcConfigurerAdapter

时间:2018-05-30 00:46:50

标签: java spring spring-boot

上下文

REST API实现为没有@EnableWebMvc

的Spring boot 1.5.3项目

目标

对于每个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 bean中,由于BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping',我得到了ServletContext is required

问题

  1. Spring引导如何在没有@EnableWebMvc的情况下注册其默认参数解析器?
  2. 我可以在没有@EnableWebMvc的情况下添加自定义参数解析器吗?
  3. 强烈推荐使用@EnableWebMvc我应该将其改装成我的代码吗?
  4. 我应该选择替代解决方案吗?
  5. 替代方案

    • 覆盖方法参数值的入侵AOP
    • HandlerInterceptor,它将uuid添加到请求参数并更新响应正文

1 个答案:

答案 0 :(得分:0)

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

是的,没有@EnableWebMvc可能。通过WebMvcConfigurerAdapter扩展名进行配置不会产生回归影响的风险。 RequestMappingHandlerAdapter不必自动装入配置类。

@Configuration
public class MyWebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        argumentResolvers.add(new MyCustomArgumentResolver());
    }
}