簡體   English   中英

JAX-RS(REST輕松)InMemoryClientExecutor / ClientRequest異常

[英]JAX-RS (REST Easy) InMemoryClientExecutor/ClientRequest Exception

我正在嘗試使用InMemoryClientExecutor在我的本地JVM上調用服務,該服務返回javax.ws.rs.core.Response對象。 我可以使它工作,但只能通過指定String類型,如下所示:

String response = new ClientRequest("/myService", executor)
    .get(String.class)
    .getEntity();

由於服務的簽名是這樣的:

@GET
@Path("/myService")
public Response getSomeData(@Form MyFormBean bean) {
    //...blah...
}

但是,我想找回實際的Response對象,以便可以取出實體並在新的“聚合”響應中返回這些對象。 當我只返回字符串時,Jackson Parser不會將其視為JSON,而只是常規字符串,因此它會執行諸如將換行符編碼為\\ n等操作。

每當我做類似的事情:

String response = new ClientRequest("/myService",executor)
    .get(Response.class)
    .getEntity();

或者甚至只是獲取普通請求對象:

String response = new ClientRequest("/myService", executor).get().getEntity();

我收到以下異常:

Exception Occured: org.jboss.resteasy.client.ClientResponseFailure: Unable to find a MessageBodyReader of content-type application/json and type null
    at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:523)
    at org.jboss.resteasy.client.core.BaseClientResponse.createResponseFailure(BaseClientResponse.java:514)
    at org.jboss.resteasy.client.core.BaseClientResponse.readFrom(BaseClientResponse.java:415)
    at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:377)
    at org.jboss.resteasy.client.core.BaseClientResponse.getEntity(BaseClientResponse.java:338)

同樣出現在下方的是:

Servlet.service() for servlet Resteasy threw exception: org.jboss.resteasy.spi.LoggableFailure: Unable to find contextual data of type: javax.servlet.http.HttpServletRequest
    at org.jboss.resteasy.core.ContextParameterInjector$GenericDelegatingProxy.invoke(ContextParameterInjector.java:56)
    at $Proxy210.getScheme(Unknown Source)

我要去哪里錯了?

沒有從服務器返回的Response對象,只是一個以JSON格式表示的實體的數據流(在您的情況下)。 嘗試將該數據反序列化回客戶端上的Response對象將不起作用,因為實際上您是在說JSON表示一個Response對象,而JSON不是(它表示*過去包含在Response中的實體) 。

好消息是,還有其他獲取實體的方法,不需要嘗試將其反向旋轉為Response 您將需要在客戶端的類路徑上包含實體:

MyEntity response = new ClientRequest("/myService", executor)
    .get(MyEntity.class)
    .getEntity();

MyEntity替換為您希望接收的實際實體的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM