猿问

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

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


繁花如伊
浏览 419回答 2
2回答

MMMHUHU

如果你需要更多的灵活性,你也可以把它放在false:cxf.jaxrs.component-scan=false并创建一个@Configuration扩展类org.apache.cxf.jaxrs.spring.SpringComponentScanServer(通常由 导入cxf.jaxrs.component-scan=true)。在这里,您可以覆盖方法并进行最后一分钟的特定更改,例如在org.apache.cxf.jaxrs.spring.AbstractSpringConfigurationFactory#finalizeFactorySetup专门用于此的方法中。@Configurationpublic class CxfServerConfig extends SpringComponentScanServer {&nbsp; &nbsp; @Override&nbsp; &nbsp; protected void finalizeFactorySetup(JAXRSServerFactoryBean factory) {&nbsp; &nbsp; &nbsp; &nbsp; super.finalizeFactorySetup(factory);&nbsp; &nbsp; &nbsp; &nbsp; // Don't bypasses our exception mappers&nbsp; &nbsp; &nbsp; &nbsp; factory.getProperties(true).put("support.wae.spec.optimization", false);&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答