簡體   English   中英

JAX-RS:使用 JSON POST 數據而不將 Content-Type 標頭設置為 application/json

[英]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.

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