[英]Consuming Both of Text/plain and Application/json with JAX-RS?
[英]JAX-RS: Consuming JSON POST data without setting Content-Type header to application/json
我已經使用 Jersey 實現了一個 REST 服務,它采用 JSON POST 數據並從 POJO 模型創建一個對象。 但是,為了使其工作,我必須將 Content-Type 設置為 application/json(即-H "Content-Type: application/json"
)。 我想要的是能夠使用 JSON POST 請求正文而無需用戶設置標頭,基本上就像 Elasticsearch 一樣:
POST /test_index/_search?search_type=count
{
"aggs": {
"nested_authors": {
"nested": {
"path": "authors"
},
"aggs": {
"author_last_names": {
"terms": {
"field": "authors.last_name"
}
}
}
}
}
}
這是相關的代碼:
@POST
@Path("/person")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response postPerson(PostBody pb) {
System.out.println(pb.getEmails());
}
我遇到了類似的問題。 由於在我看來定義明確的 API - 不與任何其他系統共享其端點 - 不應該依賴於指定正確Content-Type
客戶端,所以我創建了一個解決方法。 在此解決方法中,我向那些希望 Jersey 始終嘗試根據服務器定義的Content-Type
讀取輸入的資源方法添加注釋。 每當此注釋出現時, ResourceFilter
將覆蓋請求中的Content-Type
標頭,以注釋中指定的任何內容。
我在我的回答中詳細說明了這個過程。
弄清楚了。 我現在接受“application/json”和“application/x-www-form-urlencoded”內容類型。 這是代碼:
@POST
@Path("/person")
@Consumes({MediaType.APPLICATION_JSON,MediaType.APPLICATION_FORM_URLENCODED})
@Produces(MediaType.APPLICATION_JSON)
public Response postPerson(String body) throws IOException {
ObjectMapper mapper = new ObjectMapper();
PostBody pb = mapper.readValue(body, PostBody.class);
System.out.println(pb.getEmails());
}
不過,考慮一下,考慮到它包含一個 JSON 請求正文,我可能應該需要 Content-Type 標頭,但這完全是另一個討論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.