簡體   English   中英

“狀態”:415,“錯誤”:“不支持的媒體類型”

[英]“status”:415,“error”:“Unsupported Media Type”

我有以下控制器:

@PostMapping(value = {"/test/set_timeout"})
    @ResponseBody
    public void setAlertTimeout(@RequestBody Long timeout) {

我在郵遞員中提出以下要求: 在此處輸入圖片說明

錯誤文字:

{"timestamp":1495560868392,"status":415,"error":"Unsupported Media Type","exception":"org.springframework.web.HttpMediaTypeNotSupportedException","message":"Content type 'multipart/form-data;boundary=----WebKitFormBoundary9IbVq5JAKxCYUs7P;charset=UTF-8' not supported","path":"/test/set_timeout"}

問題的原因是什么?如何正確發送請求?

PS

如果使用

public static class LongWrapper{
        private long timeout;

        public long getTimeout() {
            return timeout;
        }

        public void setTimeout(long timeout) {
            this.timeout = timeout;
        }
    }

而不是Long並傳遞json( {"timeout":"2"} )-它可以正常工作

讀取json時,您的內容類型應為application / json。

如果您需要使用application / json類型並在控制器方法中編寫以下代碼:

   @RequestMapping(method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
    public RestResponse save(@RequestParam("timestamp") String timestamp, @RequestParam("status") String status) {

@RequestBody用於將JSON反序列化為POJO 如果您需要向控制器提交表單數據,請嘗試類似

@PostMapping(value = {"/test/set_timeout"})
@ResponseBody
public void setAlertTimeout(HttpServletRequest request) {
   Long l = request.getParameter("timeout");
   // continue
}

在您的請求中,您將在multipart / form-data主體中發送timeout屬性。 在郵遞員中,為正文選擇選項“原始”,然后將內容類型設置為application / json。 然后輸入以下內容作為正文內容:

{timeout: 4}

您還應該在控制器上設置消耗MediaType。 (盡管可能會自動解析為json)例如:

@PostMapping(value = {"/test/set_timeout"}, consumes = {MediaType.APPLICATION_JSON_VALUE})

無需手動添加內容類型標頭。 您正在覆蓋Postman設置的值。 只需在POST請求中選擇表單數據,然后發送您的請求以查看其是否有效。

暫無
暫無

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

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