How to setup Apache CXF with JAX-RS Spring Javaconfig and Jackson? I have read http://cxf.apache.org/docs/springboot.html#SpringBoot-SpringBootCXFJAX-RSStarter and http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-Jackson
It advises to use
<jaxrs:providers>
<bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/>
</jaxrs:providers>
but I want to stay away from XML and use plain javaconfig.
My current configuration is
@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 defined in my class MyService works, but when he is invoked I am getting message
org.apache.cxf.jaxrs.utils.JAXRSUtils : No message body writer has been found for class MyServiceResponse, ContentType: application/json;charset=UTF-8
You need to add a json Provider bean. This will act as messageProvider. Your Application class should look like this.
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();
}
}