带有Spring Boot的Apache CXF jax-rs:如何自动配置拦截器

问题描述 投票:0回答:1

我有使用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的目的。那么......有什么建议吗?

java spring-boot cxf
1个回答
1
投票

请检查CxfAutoConfiguration.javaAbstractSpringComponentScanServer.java,你不需要手动创建服务器bean,AutoConfiguration会为你做,你需要设置属性cxf.jaxrs.component-scan=true,它会将所有spring bean注释为@Path@Provider到服务器实例。如果你有自定义拦截器通过添加@Component@Provider(//with type)使它成为bean。对于Swagger和Metrics,我通常使用@Bean创建bean,请查看示例here

© www.soinside.com 2019 - 2024. All rights reserved.