Spring Boot Apache CXF JAX-RS服务上下文路径/基本URI

Ale*_*lex 1 cxf jax-rs spring-boot

我在Spring Boot中配置我的JAXRS服务器,如下所示:

    JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();
    factoryBean.setBus(this.bus);
    factoryBean.setFeatures(singletonList(swagger2Feature()));
    factoryBean.setServiceBeans(Arrays.asList(blah(), blah2(), blah3()));
    factoryBean.setAddress("/api/v1/"); // HERE

    List<Object> providers = new ArrayList<>();
    providers.add(new JacksonJaxbJsonProvider());
    factoryBean.setProviders(providers);

    BindingFactoryManager manager = factoryBean.getBus().getExtension(BindingFactoryManager.class);
    JAXRSBindingFactory restFactory = new JAXRSBindingFactory();
    restFactory.setBus(factoryBean.getBus());
    manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID, restFactory);

    return factoryBean.create();
Run Code Online (Sandbox Code Playgroud)

但是,URL总是要求/services在最前面,这很麻烦(但不是世界末日)。有什么方法可以删除/services并将其部署到根上下文中吗?

Kar*_*sad 5

如果尚未创建自己的CxfServletbean,则可以通过cxf.path在application.properties文件中设置property 来设置路径。

cxf.path=/
Run Code Online (Sandbox Code Playgroud)

另一种方法是覆盖ServletRegistrationBean

@Bean
public ServletRegistrationBean cxfServletRegistration() {
    String urlMapping = "/*";
    ServletRegistrationBean registration = new ServletRegistrationBean(
            new CXFServlet(), urlMapping);
    registration.setLoadOnStartup(-1);
    return registration;
}
Run Code Online (Sandbox Code Playgroud)