我正在使用springBootVersion = '2.5.4'并尝试自动测试以下组件:
@Component
@RequestScope
public class TokenDecodingService {
@Autowired
HttpServletRequest httpServletRequest;
/* Some logic with request */
}进入我的控制器
@RestController
@Slf4j
//@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class DrupalEnhancedController {
@Autowired
TokenDecodingService tokenDecodingService;
....
}在调试过程中,我看到了No Scope registered for scope name 'request'异常。同样的问题也适用于每个网络感知范围。
首先,我认为我使用的是错误的应用程序上下文,但我发现我使用的是AnnotationConfigReactiveWebServerApplicationContext,这个上下文应该接受web感知的bean/组件范围。
此外,我还试图在这样的bean中定义这个逻辑:
@Bean
@RequestScope
public TokenDecodingService tokenDecodingService() {
return new TokenDecodingService();
}并尝试手动定义上下文侦听器:
@Bean
public RequestContextListener requestContextListener(){
return new RequestContextListener();
}但不幸的是我没有这样做。我认为这里的根本原因是缺乏网络感知的上下文,那么我如何启用它们呢?
发布于 2021-11-24 13:55:52
您已经提到了AnnotationConfigReactiveWebServerApplicationContext,所以我假设您有一个反应性的web应用程序。在反应性应用程序中,没有“请求范围”,甚至没有HttpServletRequest,因为在一般情况下,这样的应用程序不是基于servlet的。
您可能希望将反应性ServerHttpRequest注入控制器方法中,而不是:
@RestController
public class DrupalEnhancedController {
@GetMapping("/someurl")
public Mono<SomeResponse> get(ServerHttpRequest request) { ... }
}https://stackoverflow.com/questions/70097075
复制相似问题