前段时间在使用@RequestBody注解的时候遇到了一个之前没遇到过的错误,HTTP 415Unsupported media type?这个是个什么鬼,@ResponseBody能够正常工做而一使用@RequestBody来进行交互就会报这个错误。一直请求不到Controller,我开始总觉得是路径或者json格式不对的问题,上网查资料大多也说的是这个问题。但是我已经写了javascript
data : JSON.stringify(user),html
dataType : 'json',
contentType : 'application/json;charset=UTF-8',java
按照网上的办法也一直无论用,百思不得其解。因而继续在网上找资料,web
网上分析缘由不少,但找了好久都没解决,基本是如下几类:ajax
springmvc添加配置、注解;
pom.xml添加jackson包引用;
Ajax请求时没有设置Content-Type为application/json
发送的请求内容不要转成JSON对象,直接发送JSON字符串便可 各类办法都尝试了一遍,仍是没有能解决问题;
jQuery(function($){
var urlStr = "/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);
}
});
});
造了一个简单是数据来测试,仍是不行。。
package .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 .hnust.domain.User;
import .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是不一样的:spring
spring3.x是org.springframework.http.converter.json.MappingJacksonHttpMessageConverterjson
spring4.x是org.springframework.http.converter.json.MappingJackson2HttpMessageConvertermvc
具体能够查看spring-web的jar确认,哪一个存在用哪一个!app
在配置ViewResolver的时候应该指定响应的版本,因而我将springmvc的配置文件改成:dom
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
仅仅将
MappingJacksonJsonView
改成
MappingJackson2JsonView 就解决了以前的415的问题。。。