Spring MVC 415不支持的媒体types

我正在使用Spring 3.2并尝试使用ajax post请求来提交一个json对象的数组。 如果这是相关的,我逃脱了所有的特殊字符。

我得到415的HTTP状态。

我的控制器是:

@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"; } 

您需要将jackson和jackson-databind添加到类path中。 Spring将使用它的MappingJacksonHttpMessageConverter来提取它

MappingJacksonHttpMessageConverter

一个HttpMessageConverter实现,可以使用Jackson的ObjectMapper读取和写入JSON。 JSON映射可以根据需要通过使用Jackson提供的注释来定制。 当需要进一步控制时,对于需要为特定types提供自定义JSON序列化器/反序列化器的情况,可以通过ObjectMapper属性注入自定义ObjectMapper。 默认情况下,这个转换器支持(application / json)。

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状态码问题。

我的consume="application/json"在我的请求映射configuration,期望JSONinput。 当我发送一个不是JSONinput的请求时,Spring抱怨415 Unsupported Media Type。 所以删除consume="application/json"为我工作。 因此请查看Spring控制器方法签名中的请求input和接受媒体types。 不匹配会抛出415错误。 这很可能是问题的原因。

尝试更改jsonapplication/json数据types。 你的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.创build以下filter:

  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> <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 />