簡體   English   中英

內容類型為“ *”的JAX-RS Jersey讀取實體

[英]JAX-RS Jersey Read entity with Content-Type “*”

我正在使用Jax-RS向服務器發出請求,該服務器僅返回一個單詞String,並將該響應讀入String變量。 問題是我不知道如何使用響應,因為它的Content-Type是*; charset=UTF-8 *; charset=UTF-8 (我使用郵遞員對此進行了驗證)。 Jax-RS很難解析此類標頭。 這是我的代碼:

MultivaluedMap<String, String> formData = new MultivaluedHashMap<String, String>();
formData.add("username", username);
formData.add("target", "10");
Response response = target.request().accept(MediaType.APPLICATION_JSON_TYPE).post(Entity.form(formData));
String responseString = response.readEntity(String.class);

此POST請求有效。 我得到了可以檢查的實際響應。 但是,當我嘗試將此響應讀取為String(代碼的最后一行)時,將引發以下錯誤:

org.glassfish.jersey.message.internal.HeaderValueException: Unable to parse "Content-Type" header value: "*; charset=UTF-8" ! at
org.glassfish.jersey.message.internal.InboundMessageContext.exception(InboundMessageContext.java:338) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.singleHeader(InboundMessageContext.java:333) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.getMediaType(InboundMessageContext.java:446) ! at
org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:869)

如何使Jax-RS正確讀取這種Content-Type ?!

我認為沒有任何方法可以使Jersey / Jax-RS正確讀取這種Content-Type。 對於具有Jax-RS不喜歡的Content-Type的任何類型的Response的解決方案是,只需刪除標頭,然后(如果需要)添加您自己的Content-Type標頭,該標頭更適合於Response。 在嘗試讀取Response實體之前,請執行此操作。 這解決了我的問題:

response.getHeaders().remove("Content-Type");
response.getHeaders().add("Content-Type", "text/plain");
String responseString = response.readEntity(String.class);

暫無
暫無

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

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