[英]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/json
和Accept
: application/json
如果您正在制作 jquery ajax 請求,請不要忘記添加
contentType:'application/json'
這是因為charset=utf8
在application/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
包含Object1
和Object2
並且一切正常。
我知道這對於幫助 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({“用戶名”:用戶名,“密碼”:密碼})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.