HTTP 415 错误 – 不支持的媒体类型(Unsupported media type)

   前段时间在使用@RequestBody注解的时候遇到了一个以前没遇到过的错误,HTTP 415  Unsupported media type? 这个是个什么鬼,@ResponseBody可以正常工作而一使用@RequestBody来进行交互就会报这个错误。一直请求不到Controller,我开始总以为是路径或者json格式不对的问题,上网查资料大多也说的是这个问题。可是我已经写了

data : JSON.stringify(user),  

dataType : 'json',

contentType : 'application/json;charset=UTF-8',

按照网上的办法也一直不管用,百思不得其解。于是继续在网上找资料,

网上分析原因很多,但找了很久都没解决,基本是以下几类:

  • springmvc添加配置、注解;
  • pom.xml添加jackson包引用;
  • Ajax请求时没有设置Content-Type为application/json
  •  发送的请求内容不要转成JSON对象,直接发送JSON字符串即可
各种办法都尝试了一遍,还是没有能解决问题;

<script>
	jQuery(function($){
	var urlStr = "<%=request.getContextPath()%>/user/GetUser";
		var user = {
			"id" : 6,
			"userName" : "小红",
			"password" : "123",
			"age" : 12
		};
		$.ajax({
			url : urlStr,
			type : "POST",
			data : JSON.stringify(user), //转JSON字符串  
			dataType : 'json',
			contentType : 'application/json;charset=UTF-8', //contentType很重要     
			success : function(result) {
				console.log(result);
				//alert(result);
				//data = eval("(" + result + ")");
				//alert(data);
				$("#a").html(result.userName);
			}
		});
	});
</script>
造了一个简单是数据来测试,还是不行。。

package com.cn.hnust.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cn.hnust.domain.User;
import com.cn.hnust.service.IUserService;

@Controller
@RequestMapping("/user")
public class UserController {

	@Autowired
	private IUserService userService;

	@RequestMapping("/showUser")
	public String toIndex(HttpServletRequest request, Model model) {
		// int userId = Integer.parseInt(request.getParameter("id"));
		// User user = this.userService.getUserById(userId);
		// model.addAttribute("user", user);
		return "showUser";
	}

	@RequestMapping(value = "/GetUser", method = RequestMethod.POST)
	public @ResponseBody
	User GetUser(@RequestBody User user) {
		user.setUserName("Wei");
		return user;
	}

}

控制器也很简单,可是就是请求不到Controller方法。于是我继续在网上寻找资料,直到看到一篇博客,才找到了问题的解决办法。


原来是Jackson的依赖问题,spring3.x和spring4.x是不同的:

spring3.x是org.springframework.http.converter.json.MappingJacksonHttpMessageConverter

spring4.x是org.springframework.http.converter.json.MappingJackson2HttpMessageConverter


具体可以查看spring-web的jar确认,哪个存在用哪个!


在配置ViewResolver的时候应该指定响应的版本,于是我将springmvc的配置文件改为:

<bean
		class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<property name="order" value="1" />
		<property name="mediaTypes">
			<map>
				<entry key="json" value="application/json" />
				<entry key="xml" value="application/xml" />
				<entry key="htm" value="text/html" />
			</map>
		</property>

		<property name="defaultViews">
			<list>
				<!-- JSON View -->
				<bean
					class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
				</bean>
			</list>
		</property>
		<property name="ignoreAcceptHeader" value="true" />
	</bean>


仅仅将
MappingJacksonJsonView
改为
MappingJackson2JsonView


就解决了之前的415的问题。。。 
  • 12
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
HTTP Status 415 - Unsupported Media Type表示服务器无法处理请求中所包含的媒体类型。这种错误通常发生在客户端向服务器发送请求时,请求的Content-Type与服务器所支持媒体类型不匹配。这可能是因为请求中的Content-Type头部字段设置不正确,或者服务器根本不支持请求中指定的媒体类型。 例如,在使用@RequestBody注解接收请求体数据时,服务器期望接收的是特定的媒体类型(例如application/json),如果请求的Content-Type不是服务器所支持媒体类型,就会返回415错误。 为了解决这个问题,你可以检查以下几个方面: 1. 确保请求头中的Content-Type字段正确设置为服务器所支持媒体类型,例如application/json。 2. 确保请求的媒体类型与服务器所支持媒体类型匹配,如果不匹配,可以尝试将请求的媒体类型修改为服务器所支持媒体类型。 3. 检查服务器端的代码,确保服务器端能够正确处理请求中的媒体类型。 下面是一些可能导致HTTP Status 415错误的常见问题和解决方法: - 如果你正在使用Spring MVC框架,确保在Controller方法上使用了正确的MediaType注解,与客户端请求的Content-Type保持一致。 - 检查请求中的Content-Type头部字段是否正确设置,并且与服务器端期望的媒体类型一致。 - 如果是通过POSTMAN等工具发送请求,检查请求是否正确设置了Content-Type字段,并且选择了合适的媒体类型。 - 检查服务器端是否正确处理了请求中的媒体类型。可能需要在服务器端的代码中添加相应的媒体类型处理逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值