[英]CXF 3.0 and Spring - No message body reader has been found for response Class
我正在為服務發送基於JSX-RS的Spring + CXF客戶端,該客戶端發送如下所示的簡單響應。
JSON:響應
{
"message": "Hey Karthik"
}
我的spring.xml中具有以下配置:
<jaxrs:providers>
<bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="dropRootElement" value="true" />
</bean>
</jaxrs:providers>
我的實體類看起來像這樣
@XmlRootElement
public class HiModel {
private String message;
public HiModel(){}
.
.
.
}
我的JAX-RS客戶端是這樣的:
@Test
public void getMessage(){
WebClient client = WebClient.create("http://localhost:8182");
client.path("hiService/sayHi/hi");
client.type(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON);
Response r = client.get();
System.out.println(r.readEntity(HiModel.class));
}
我收到錯誤消息 : 找不到類com.karthik.model.HiModel,ContentType的消息正文閱讀器:application / json
我該如何解決? 我選擇作為客戶端編寫的方法存在很多問題,但我首先需要解決此問題。 請幫忙。
編輯1:我可以通過解決
System.out.println(r.readEntity(String.class));
但是,如何使用HiModel.class作為實體來解決它
萬一它可以幫助某人。 我有類似的情況,我設法使用Jackson JSON庫解決了它。 使用您的示例:
WebClient client = WebClient.create("http://localhost:8182/hiService/sayHi/hi");
Response r = client.accept("application/json").get();
MappingJsonFactory factory = new MappingJsonFactory();
JsonParser parser = factory.createJsonParser((InputStream)r.getEntity());
HiModel hiModel= parser.readValueAs(HiModel.class);
實際上,Apache CXF JAX-RS原型中存在非常相似的測試。
將其添加到webclient對象。
List<Object> providers = new ArrayList<>(); // add custom providers if any providers.add(new JacksonJaxbJsonProvider()); WebClient client = WebClient.create(ENDPOINT_ADDRESS,providers);
如果您沒有使用spring配置cxf,則:
1)在Web.xml中
<servlet>
<display-name>CXFNonSpringJaxrsServlet</display-name>
<servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
<servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>
com.jaxrs.JaxRsConfigApplication
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CXFNonSpringJaxrsServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
2)在JaxRsConfigApplication.java上
public class JaxRsConfigApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new HashSet<>();
resources.add(ServicioPistaRest.class);
resources.add(ConsultarDatosSolicitud.class);
return resources;
}
@Override
public Set<Object> getSingletons() {
Set<Object> classes = new HashSet<>();
JacksonJaxbJsonProvider jacksonJaxbJsonProvider = new JacksonJaxbJsonProvider();
classes.add(jacksonJaxbJsonProvider);
return classes;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.