gpt4 book ai didi

java - Spring RESTful Web 服务和 bean "request"和 "session"范围

转载 作者:行者123 更新时间:2023-11-30 06:15:24 25 4
gpt4 key购买 nike

我使用 spring 指南中的简单 REST 服务的纯示例代码作为基础: http://spring.io/guides/gs/rest-service/

我添加了单个 Bean 配置:

@Configuration
public class Config {

@Bean
@Scope(value = WebApplicationContext.SCOPE_REQUEST)

public RequestData requestHelper() {
return new RequestData();
}

}

然后我修改后的 Controller 如下所示:

@RestController
public class GreetingController {

private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class);

@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
System.out.println(applicationContext.getBean(RequestData.class));

return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}

我得到了

java.lang.IllegalStateException: No Scope registered for scope 'session']

调用“/greeting”的结果

我在这里阅读了一些描述: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html但是我仍然很困惑。

他们写道:“请求、 session 和全局 session 范围仅在您使用可识别 Web 的 Spring ApplicationContext 实现时可用”。

这是否意味着在这种情况下不允许使用我正在使用的“AnnotationConfigApplicationContext”?我是否被迫改用一些 xml 配置?

最佳答案

报价

web-aware Spring ApplicationContext implementation

指的是 WebApplicationContext 的适当子类.您正在实例化 AnnotationConfigApplicationContext,它不是 WebApplicationContext 的子类型,并且没有注册 SESSIONREQUEST范围。

在您的 @RestController 中创建全新的 ApplicationContext 也毫无意义。 @RestController 对象已经是 Spring WebApplicationContext 中的一个 bean。只需将您的新请求范围 @Bean 添加到该上下文并 Autowiring 到您的 Controller 中。

关于java - Spring RESTful Web 服务和 bean "request"和 "session"范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28904115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com