Я реализую простой проект с функцией загрузки весны и cxf rest, и я пытаюсь выяснить, что происходит с поставщиками xml/json. неspring boot + cxf rest json/xml providers
- нет поставщиков наCxfConfig: , когда я @Produce ("приложение/XML") он возвращает мне действительный XML , когда я @Produce ("приложения/JSON") я получаю Нет тело сообщения писателя было найдено для класса com.cxfexample.dto.User, ContentType: приложения/JSon
- поставщиков на CxfConfig:
@Configuration
public class CxfConfig {
@Autowired
private Bus bus;
@Autowired
MyServiceIntf peService;
@Bean
public Server rsServer() {
JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();
endpoint.setBus(bus);
endpoint.setAddress("/");
endpoint.setServiceBeans(Arrays.<Object>asList(peService));
endpoint.setProviders(Arrays.asList(jacksonJaxbJsonProvider(), jaxbElementProvider()));
return endpoint.create();
}
@Bean
public JacksonJaxbJsonProvider jacksonJaxbJsonProvider() {
return new JacksonJaxbJsonProvider();
}
@Bean
public JAXBElementProvider jaxbElementProvider() {
return new JAXBElementProvider();
}
}
когда я @Produce («приложение/XML») или @Produce («приложение/JSON») он работает нормально, но когда я реализовать как из них я получить действительный только DataFormat первого аргумента @ Produce ({"application/xml", "application/json"})
Вопрос 1, так что для xml используется не по умолчанию, а для Json?
Вопрос 2 ошибка сообщение Ни один писатель тела сообщения не был найден для класса относится к absense провайдера или ошибку аннотации к моей Pojo пользователю? Когда я удалить @XmlRootElement я получаю также это сообщение для application/xml.
Вопрос 3 когда я использую провайдер, почему я получить достоверные данные только для первого аргумента @Produce ({ «приложение/XML», «применение/JSON»}) и поэтому, когда я запросить этот сервис, например, с почтальон моего типа контента является единственным приложением/XML, а не оба
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cxfexamle</groupId>
<artifactId>cxfexample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>CXFExample</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- CXF RS -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxrs</artifactId>
<version>3.1.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>
</project>
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
@Path("/Rest")
public interface MyServiceIntf {
@GET
@Path("/getUser")
@Produces({"application/json","application/xml"})
User getUser();
}
@Service
public class MyServiceImpl implements MyServiceIntf {
@Autowired
User user;
@Override
public User getUser() {
user.setUserName("David");
user.setPassword("123");
return user;
}
}
@XmlRootElement
@Component
public class User {
private String userName;
private String password;
@XmlElement
public String getUserName() {
return userName;
}
@XmlElement
public String getPassword() {
return password;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setPassword(String password) {
this.password = password;
}
}