上下文
REST API实现为没有@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
bean中,由于BeanCreationException: Error creating bean with name 'defaultServletHandlerMapping'
,我得到了ServletContext is required
。
问题
@EnableWebMvc
的情况下注册其默认参数解析器? @EnableWebMvc
的情况下添加自定义参数解析器吗? @EnableWebMvc
我应该将其改装成我的代码吗?替代方案
答案 0 :(得分:0)
答案基于@M的评论。 Denium:
是的,没有@EnableWebMvc
可能。通过WebMvcConfigurerAdapter
扩展名进行配置不会产生回归影响的风险。 RequestMappingHandlerAdapter
不必自动装入配置类。
@Configuration
public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new MyCustomArgumentResolver());
}
}