簡體   English   中英

Spring MVC 415 不支持的媒體類型

[英]Spring MVC 415 Unsupported Media Type

我正在使用 Spring 3.2 並嘗試使用 ajax post 請求提交 json 對象的數組。 如果這是相關的,我轉義了所有特殊字符。

我的 HTTP 狀態為 415。

我的 controller 是:

@RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json")
    public @ResponseBody String saveProfileJson(@RequestBody String[] profileCheckedValues){
        System.out.println(profileCheckedValues.length);
        return "success";
    }

jquery 是:

jQuery("#save").click(function () {
        var profileCheckedValues = [];
        jQuery.each(jQuery(".jsonCheck:checked"), function () {
            profileCheckedValues.push($(this).val());
        });
        if (profileCheckedValues.length != 0) {
            jQuery("body").addClass("loading");
            jQuery.ajax({
                type: "POST",
                contentType: "application/json",
                url: contextPath + "/sample/save-profile",
                data: "profileCheckedValues="+escape(profileCheckedValues),
                dataType: 'json',
                timeout: 600000,
                success: function (data) {
                    jQuery('body').removeClass("loading");
                },
                error: function (e) {
                    console.log("ERROR: ", e);
                    jQuery('body').removeClass("loading");
                }
            });
        }
    });

我發布的數組中的對象之一的示例如下 json:

{
  "id": "534213341",
  "name": "Jack Lindamood",
  "first_name": "Jack",
  "last_name": "Lindamood",
  "link": "https://www.facebook.com/jack",
  "username": "jack",
  "gender": "male",
  "locale": "en_US",
  "updated_time": "2013-07-23T21:13:23+0000"
}

錯誤是:

The server refused this request because the request entity is in a format not supported by the requested resource for the requested method

為什么會發生此錯誤 - 有人知道嗎?

您可以嘗試使用HttpServletRequest 它沒有任何問題

  @RequestMapping(value = "/save-profile", method = RequestMethod.POST,consumes="application/json",headers = "content-type=application/x-www-form-urlencoded")
    public @ResponseBody String saveProfileJson(HttpServletRequest request){
       System.out.println(request.getParameter("profileCheckedValues"));
        return "success";
    }

1)添加以下依賴項

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>${jackson-version}</version> // 2.4.3
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson-version}</version> // 2.4.3
</dependency>

2)如果在控制器方法中使用@RequestBody注釋,請確保在xml文件中添加了以下內容

<mvc:annotation-driven />

這應解決415狀態代碼問題。

您需要將jackson和jackson-databind添加到類路徑中。 Spring將使用它的MappingJacksonHttpMessageConverter來獲取它

MappingJacksonHttpMessageConverter

一個HttpMessageConverter實現,可以使用Jackson的ObjectMapper讀寫JSON。 通過使用Jackson提供的注釋,可以根據需要自定義JSON映射。 當需要進一步控制時,可以通過ObjectMapper屬性注入自定義ObjectMapper,以用於需要為特定類型提供自定義JSON序列化器/反序列化器的情況。 默認情況下,此轉換器支持(application / json)。

我在我的請求映射配置中consume="application/json" ,它需要一個json輸入。 當我發送一個不是JSON輸入的請求時,Spring抱怨415 Unsupported Media Type。 所以刪除consume="application/json"對我consume="application/json" 因此,請查看Spring控制器方法簽名中的請求輸入和接受媒體類型。 不匹配會引發415錯誤。 這很可能是問題的原因。

嘗試將json更改為application/json for datatype。 你的json看起來是什么有效 我之前從未見過json轉換為String [],所以這個問題也是如此。

我有同樣的問題。 我必須按照以下步驟解決問題:

1.確保您具有以下依賴項:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson-version}</version> // 2.4.3
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson-version}</version> // 2.4.3
    </dependency>

2.創建以下過濾器:

    public class CORSFilter extends OncePerRequestFilter {

        @Override
        protected void doFilterInternal(HttpServletRequest request,
                                        HttpServletResponse response, FilterChain filterChain)
                throws ServletException, IOException {

            String origin = request.getHeader("origin");
            origin = (origin == null || origin.equals("")) ? "null" : origin;
            response.addHeader("Access-Control-Allow-Origin", origin);
            response.addHeader("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, DELETE, OPTIONS");
            response.addHeader("Access-Control-Allow-Credentials", "true");
            response.addHeader("Access-Control-Allow-Headers",
                    "Authorization, origin, content-type, accept, x-requested-with");

            filterChain.doFilter(request, response);
        }
    }

3.在web.xml中為請求應用上面的過濾器

    <filter>
        <filter-name>corsFilter</filter-name>
        <filter-class>com.your.package.CORSFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>corsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

我希望這對某人有用。

我遇到了同樣的問題,我剛剛在spring-servlet.xml中提出了下面的代碼行,它幾乎就在這個xml文件的末尾。 有效。 <mvc:annotation-driven />

我有同樣的問題,一切看起來都很好。 其他請求在同一個項目中非常有效。 最后發現我的請求 object 重復了:

@JsonProperty("duplicatePropertyName")

入口。 錯誤信息:

415 不支持的媒體類型

在這種情況下真的很混亂。 希望這對像我這樣眼睛不好的人有幫助;-)

暫無
暫無

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

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