Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在没有@EnableWebMvc和WebMVCConfigureAdapter的情况下配置自定义参数解析器_Java_Spring_Spring Boot - Fatal编程技术网

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

Java 是否可以在没有@EnableWebMvc和WebMVCConfigureAdapter的情况下配置自定义参数解析器,java,spring,spring-boot,Java,Spring,Spring Boot,上下文 REST API实现为Spring boot 1.5.3项目,无需@EnableWebMvc 目标 对于每个API调用,创建一个UUID字符串,并将其注入控制器方法以进行审计(UUID用于响应体和日志记录)。应按如下方式使用: @PostMapping("/reserveCredits") public ResponseEntity<Result> reserveCredits(String uuid) { ... ... new Result(uuid) .

上下文

REST API实现为Spring boot 1.5.3项目,无需
@EnableWebMvc

目标

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

@PostMapping("/reserveCredits")
public ResponseEntity<Result> reserveCredits(String uuid) {
    ...
    ... new Result(uuid) ... 
。。。在我的
@Configuration
bean中,我得到
BeanCreationException:创建名为“defaultServletHandlerMapping”的bean时出错,因为需要
ServletContext

问题

  • Spring boot如何在没有
    @EnableWebMvc
    的情况下注册其默认参数解析器
  • 我是否可以在不使用
    @EnableWebMvc
    的情况下添加自定义参数解析器
  • 是否高度推荐使用
    @EnableWebMvc
    ,我应该将其更新到我的代码中
  • 我应该选择其他解决方案吗
  • 备选方案

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

    根据@M.Denium的评论得出的答案:

    是的,不使用
    @EnableWebMvc
    也可以。通过扩展
    WebMVCConfigureAdapter
    进行的配置没有回归影响的风险
    RequestMappingHandlerAdapter
    不必自动连接到config类中

    @Configuration
    public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(new MyCustomArgumentResolver());
        }
    }
    
    @配置
    公共类MyWebMvcConfig扩展了WebMVCConfigureAdapter{
    @凌驾
    public void addArgumentResolver(列出ArgumentResolver){
    添加(新的MyCustomArgumentResolver());
    }
    }
    
    您不需要
    @EnableWebMvc
    ,因为Spring Boot已经为您做到了这一点。只需添加一个扩展
    WebMVCConfigureAdapter
    @Configuration
    类。
    @Autowired
    private RequestMappingHandlerAdapter requestMappingHandlerAdapter;
    
    @Configuration
    public class MyWebMvcConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
            argumentResolvers.add(new MyCustomArgumentResolver());
        }
    }