我正在尝试原型Spring Boot应用程序 . 我来自Guice JAX-RS应用程序,因此我更喜欢Spring MVC的标准JAX-RS注释 . 我已经让Jetty起来服务了:
@Configuration
@Import({ResteasyBootstrap.class, SpringBeanProcessorServletAware.class, HttpServletDispatcher.class})
public class EmbeddedJetty {
@Bean
@Singleton
public EmbeddedServletContainerFactory servletContainer() {
JettyEmbeddedServletContainerFactory factory = new JettyEmbeddedServletContainerFactory();
factory.setPort(9000);
factory.setSessionTimeout(10, TimeUnit.MINUTES);
return factory;
}
}
但是,我只是无法弄清楚如何正确连接RESTEasy . 有了上面的 SpringBeanProcessorServletAware
它就好了,看起来 ServletContext
在最终被使用之前没有通过 ServletContextAware
注入:
java.lang.NullPointerException: null
at org.jboss.resteasy.plugins.spring.SpringBeanProcessorServletAware.getRegistry(SpringBeanProcessorServletAware.java:30)
at org.jboss.resteasy.plugins.spring.SpringBeanProcessor.postProcessBeanFactory(SpringBeanProcessor.java:247)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:284)
at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:174)
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:680)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:522)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
我也尝试使用 SpringContextLoaderListener
,但这似乎与spring-boot AnnotationConfigEmbeddedWebApplicationContext
类冲突 .
我使用的是spring-boot 1.3.3和spring-framework 4.3.0.rc1
3 回答
另一个答案是没有你的资源作为spring bean,这个自动配置将正确地集成它们:
Configuration类:
Jackson 提供者:
注意:这是Spring Boot 1.3.3 / RESTEasy 3.0.16的工作配置
您可以使用RESTEasy Spring Boot启动程序 . 这是你如何做到的:
Adding POM dependency
将Maven依赖项添加到Spring Boot应用程序pom文件中 .
Registering JAX-RS application classes
只需将您的JAX-RS应用程序类(Application的子类)定义为Spring bean,它就会自动注册 . 请参阅下面的示例 . 有关详细信息,请参阅How to use RESTEasy Spring Boot Starter中的JAX-RS应用程序注册方法部分 .
Registering JAX-RS resources and providers
只需将它们定义为Spring bean,它们就会自动注册 . 请注意,JAX-RS资源可以是单例或请求作用域,而JAX-RS提供者必须是单例 .
Further information at the project GitHub page .
这是完全有效的例子 .
您的 endpoints 应该已启动并正在运行 . 如果缺少类路径上的FilterDispatcher类,请将resteasy-jaxrs库添加到构建描述符中 .