簡體   English   中英

JSON 的 Http 415 Unsupported Media type 錯誤

[英]Http 415 Unsupported Media type error with JSON

我正在使用 JSON 請求調用 REST 服務,它響應HTTP 415 "Unsupported Media Type"錯誤。

請求內容類型設置為("Content-Type", "application/json; charset=utf8")

如果我不在請求中包含 JSON 對象,它工作正常。 我將google-gson-2.2.4庫用於 JSON。

我嘗試使用幾個不同的庫,但沒有任何區別。

有人可以幫我解決這個問題嗎?

這是我的代碼:

public static void main(String[] args) throws Exception
{

    JsonObject requestJson = new JsonObject();
    String url = "xxx";

    //method call for generating json

    requestJson = generateJSON();
    URL myurl = new URL(url);
    HttpURLConnection con = (HttpURLConnection)myurl.openConnection();
    con.setDoOutput(true);
    con.setDoInput(true);

    con.setRequestProperty("Content-Type", "application/json; charset=utf8");
    con.setRequestProperty("Accept", "application/json");
    con.setRequestProperty("Method", "POST");
    OutputStream os = con.getOutputStream();
    os.write(requestJson.toString().getBytes("UTF-8"));
    os.close();


    StringBuilder sb = new StringBuilder();  
    int HttpResult =con.getResponseCode();
    if(HttpResult ==HttpURLConnection.HTTP_OK){
    BufferedReader br = new BufferedReader(new   InputStreamReader(con.getInputStream(),"utf-8"));  

        String line = null;
        while ((line = br.readLine()) != null) {  
        sb.append(line + "\n");  
        }
         br.close(); 
         System.out.println(""+sb.toString());  

    }else{
        System.out.println(con.getResponseCode());
        System.out.println(con.getResponseMessage());  
    }  

}
public static JsonObject generateJSON () throws MalformedURLException

{
   String s = "http://www.example.com";
        s.replaceAll("/", "\\/");
    JsonObject reqparam=new JsonObject();
    reqparam.addProperty("type", "arl");
    reqparam.addProperty("action", "remove");
    reqparam.addProperty("domain", "staging");
    reqparam.addProperty("objects", s);
    return reqparam;

}
}

requestJson.toString()的值是:

{"type":"arl","action":"remove","domain":"staging","objects":"http://www.example.com"}

不確定原因,但從con.setRequestProperty("Content-Type", "application/json; charset=utf8")刪除行charset=utf8解決了該問題。

添加Content-Type : application/jsonAccept : application/json

如果您正在制作 jquery ajax 請求,請不要忘記添加

contentType:'application/json'

這是因為charset=utf8application/json之后應該沒有空格。 那會工作得很好。 application/json;charset=utf-8一樣使用它

如果您使用AJAX jQuery請求,這是必須應用的。 如果不是,它會拋出415錯誤。

dataType: "json",
contentType:'application/json'

如果您在 React RSAA 中間件或類似軟件中獲得此信息,請添加標頭:

  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(model),

HttpVerb 需要將其標頭作為鍵值對字典

headers = {'Content-Type': 'application/json', 'charset': 'utf-8'}

添加 HTTP 標頭管理器並將您的 API 的標頭名稱和值添加到其中。 例如內容類型、接受等。這將解決您的問題。

有時,Charset Metada 在發送請求時會破壞 json。 最好不要在請求類型中使用 charset=utf8 。

我通過更新我的控制器接收的Request類來解決這個問題。

我從服務器端的Request類中刪除了以下類級別的注釋。 在那之后,我的客戶沒有收到 415 錯誤。

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement

415(不支持的媒體類型)狀態代碼表示源服務器拒絕為請求提供服務,因為目標資源上的有效負載采用此方法不支持的格式。 格式問題可能是由於請求指示的 Content-Type 或 Content-Encoding,或者是直接檢查數據的結果。 文件

我正在發送“刪除”rest 請求,但它以 415 失敗。我看到了我的服務器用來訪問 api 的內容類型。 就我而言,它是“application/json”而不是“application/json; charset=utf8”。

因此,請詢問您的 api 開發人員,同時嘗試僅使用 content-type="application/json" 發送請求。

我遇到過同樣的問題。 我的問題是序列化的復雜對象。 我的對象的一個​​屬性是Map<Object1, List<Object2>> 我改變了這個屬性,比如List<Object3>其中Object3包含Object1Object2並且一切正常。

我知道這對於幫助 OP 解決他的問題為時已晚,但對於我們所有剛剛遇到此問題的人來說,我已經通過刪除帶有我的類的參數的構造函數來解決這個問題,該參數用於保存 json 數據。

在配置中手動添加 MappingJackson2HttpMessageConverter 為我解決了這個問題:

@EnableWebMvc
@Configuration
@ComponentScan
public class RestConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> messageConverters) {
        messageConverters.add(new MappingJackson2HttpMessageConverter());
        super.configureMessageConverters(messageConverters);
    }
}

原因可能是沒有在您的調度程序 servlet xml 文件中添加“注釋驅動”。 也可能是因為沒有在標頭中添加為 application/json

在使用 JSON 請求處理 REST 服務時,我也遇到了這個問題,它以 HTTP 415“不支持的媒體類型”錯誤響應。 這些代碼行將幫助您解決問題。

headers: { "Content-Type": "application/json", "accept": " / " },

之后,您應該編寫代碼來對 JSON 正文進行編碼。 例如,

正文:jsonEncode({“用戶名”:用戶名,“密碼”:密碼})

如果您是通過Postman發出郵寄請求,請確保您選擇了這 2 個選項

1.應該選擇JSON 在此處輸入圖片說明

2. 內容類型- 應用程序/json

在此處輸入圖片說明

暫無
暫無

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

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