首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用程序初始化期间不创建web感知作用域的组件。

在应用程序初始化期间不创建web感知作用域的组件。
EN

Stack Overflow用户
提问于 2021-11-24 13:35:57
回答 1查看 86关注 0票数 1

我正在使用springBootVersion = '2.5.4'并尝试自动测试以下组件:

代码语言:javascript
复制
@Component
@RequestScope
public class TokenDecodingService {
   
   @Autowired
   HttpServletRequest httpServletRequest;
/* Some logic with request */
}

进入我的控制器

代码语言:javascript
复制
@RestController
@Slf4j
//@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class DrupalEnhancedController {

    @Autowired
    TokenDecodingService tokenDecodingService;

    ....

}

在调试过程中,我看到了No Scope registered for scope name 'request'异常。同样的问题也适用于每个网络感知范围。

首先,我认为我使用的是错误的应用程序上下文,但我发现我使用的是AnnotationConfigReactiveWebServerApplicationContext,这个上下文应该接受web感知的bean/组件范围。

此外,我还试图在这样的bean中定义这个逻辑:

代码语言:javascript
复制
    @Bean
    @RequestScope
    public TokenDecodingService tokenDecodingService() {
        return new TokenDecodingService();
    }

并尝试手动定义上下文侦听器:

代码语言:javascript
复制
@Bean 
public RequestContextListener requestContextListener(){
    return new RequestContextListener();
}

但不幸的是我没有这样做。我认为这里的根本原因是缺乏网络感知的上下文,那么我如何启用它们呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-24 13:55:52

您已经提到了AnnotationConfigReactiveWebServerApplicationContext,所以我假设您有一个反应性的web应用程序。在反应性应用程序中,没有“请求范围”,甚至没有HttpServletRequest,因为在一般情况下,这样的应用程序不是基于servlet的。

您可能希望将反应性ServerHttpRequest注入控制器方法中,而不是:

代码语言:javascript
复制
@RestController
public class DrupalEnhancedController {

    @GetMapping("/someurl")
    public Mono<SomeResponse> get(ServerHttpRequest request) { ... }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70097075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档