[英]Apache CXF jax-rs with Spring Boot: how to configure interceptors automatically
我有使用 Spring Boot 的 CXF Rest Api,所以这是我的 application.properties:
cxf.path=/
cxf.jaxrs.server.address=/api
cxf.jaxrs.component-scan=true
cxf.jaxrs.classes-scan-packages=org.apache.cxf.jaxrs.swagger,org.apache.cxf.metrics
我的端点被注释为@Component
,但问题是我不仅有组件或提供者,还有 ExceptionMappers、In/Out/Fault Interceptors。
现在我想知道它是否也可以通过属性文件进行配置。
而且我知道可能的解决方案(不要向我推荐这个):
@Bean
public Server rsServer() {
final JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
endpoint.setInInterceptors(Arrays.<Interceptor<? extends Message>>asList(
interceptor1,
interceptor2,
interceptor3
));
endpoint.setOutInterceptors(Arrays.<Interceptor<? extends Message>>asList(out1));
endpoint.setOutFaultInterceptors(Arrays.<Interceptor<? extends Message>>asList(out1));
endpoint.setProviders(Arrays.asList(
provider1(),
provider2()
));
endpoint.setBus(bus);
endpoint.setAddress("/api");
endpoint.setServiceBeans(Arrays.asList(
endpoint1,
endpoint2,
...,
endpointN
));
endpoint.setFeatures(Arrays.asList(new Swagger2Feature()));
return endpoint.create();
}
这一点都不酷,因为可以自动配置这么多功能,现在对于一些额外的配置,我必须手动配置所有内容。
它完全破坏了使用 Spring Boot 的目的。 所以..有什么建议吗?
请检查CxfAutoConfiguration.java和AbstractSpringComponentScanServer.java ,你不需要手动创建服务器 bean,AutoConfiguration 为你做,你只需要设置属性cxf.jaxrs.component-scan=true
,它会添加所有注解@Path
和@Provider
spring bean服务器实例的@Provider
。 如果您有自定义拦截器,则通过添加@Component
和@Provider(//with type)
使其成为 bean。 对于 Swagger 和 Metrics,我通常使用@Bean
创建 bean,请在此处查看示例
@karthik-prasadkart 的答案是正确的。 如果您需要更大的灵活性,您也可以将其设置为false
:
cxf.jaxrs.component-scan=false
并创建一个扩展org.apache.cxf.jaxrs.spring.SpringComponentScanServer
的@Configuration
类(通常由cxf.jaxrs.component-scan=true
导入)。 在这里,您可以覆盖方法并进行最后一分钟的特定更改,例如在专门用于此目的的org.apache.cxf.jaxrs.spring.AbstractSpringConfigurationFactory#finalizeFactorySetup
方法中。
@Configuration
public class CxfServerConfig extends SpringComponentScanServer {
@Override
protected void finalizeFactorySetup(JAXRSServerFactoryBean factory) {
super.finalizeFactorySetup(factory);
// Don't bypasses our exception mappers
factory.getProperties(true).put("support.wae.spec.optimization", false);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.