具有 Spring Javaconfig 和 Jackson 的 Apache CXF (JAX-RS)

Apache CXF (JAX-RS) with Spring Javaconfig and Jackson

如何使用 JAX-RS 设置 Apache CXF SpringJavaconfig 和 Jackson? 我读过了 http://cxf.apache.org/docs/springboot.html#SpringBoot-SpringBootCXFJAX-RSStarterhttp://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-Jackson

建议使用

<jaxrs:providers>
   <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
</jaxrs:providers>

但我想远离 XML 并使用纯 javaconfig。

我目前的配置是

@SpringBootApplication
public class Application {  
    @Autowired
    private Bus bus;

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
    }

    @Bean
    public Server rsServer() {
        JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
        endpoint.setBus(bus);
        endpoint.setAddress("/");
        endpoint.setServiceBeans(Arrays.<Object>asList(new MyService()));

        return endpoint.create();
    }   
}

Andpoint 在我的 class MyService 中定义有效,但是当他被调用时我收到消息

org.apache.cxf.jaxrs.utils.JAXRSUtils : No message body writer has been found for class MyServiceResponse, ContentType: application/json;charset=UTF-8

您需要添加一个 json 提供者 bean。这将充当消息提供者。您的申请 class 应如下所示。

import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider

@SpringBootApplication
public class Application {  
    @Autowired
    private Bus bus;

    public static void main(String[] args) {
        SpringApplication.run(Application .class, args);
    }

    @Bean
    public Server rsServer() {
        List<? extends Object> providers = new ArrayList<>();
        providers.add(getJsonProvider());
        JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
        endpoint.setProviders(providers);
        endpoint.setBus(bus);
        endpoint.setAddress("/");
        endpoint.setServiceBeans(Arrays.asList(new MyService())); 

        return endpoint.create();
    }

    @Bean
    public JacksonJsonProvider getJsonProvider() {
        new JacksonJsonProvider();
    }
}