java - Apache CXF jax-rs 与 Spring Boot : how to configure interceptors automatically

标签 java spring-boot cxf

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

关于java - Apache CXF jax-rs 与 Spring Boot : how to configure interceptors automatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52272720/

相关文章:

java - 为 Junit 使用 spring-rabbit-test

rest - 是否可以使用 MTOM 响应 CXF RESTful Web 服务

带有 cxf : Soap11FaultInInterceptor. unmarshalFault 的 soap 客户端

java - 为什么Java中的浮点计算比C慢

java - 相同的键 - 使用 HashMap 的不同值

java - Spring Boot集成测试未在应用程序主方法内执行初始化步骤

gradle - 使用 Gradle War Plugin 时如何使 bootRepackage 依赖于 jar 而不是 war

java - 收起笨拙的 Java 类路径

java - 如何在play scala模板中定义变量

web-services - Axis2 webservice 和 CXF web service 的区别