今天在做springmvc的demo时,使用ajax.post 请求获取后端封装返回的json数据时一直报406错误,在查阅了大量的网站后,终于在stackoverflow上找到了解决方案
==============================================================================================================================
1.项目依赖配置
(注:这部分是相对于Maven项目来说的,如果不是Maven管理的项目,可以不理会这部分,直接把相关Sring包和Jackson包导入lib库即可。)
配置Jackson 和Spring依赖
2.6.3
com.fasterxml.jackson.core
jackson-core
${jackson-version}
com.fasterxml.jackson.core
jackson-databind
${jackson-version}
com.fasterxml.jackson.core
jackson-annotations
${jackson-version}
2.模型
一个简单的实体对象,将所有数据封装为统一结构,然后将会被转化为json格式数据输出。
/**
* 封装 返回Json 格式数据
*
* @author HASEE
* @since 2017-03-21 22:15:58
**/
public class JsonResult
implements Serializable {
private static final long serialVersionUID = -4699713095477151086L;
/**
* 数据
*/
private T data;
/**
* 信息
*/
private String message;
/**
* 是否成功
*/
private boolean success;
public Object getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public JsonResult() {
super();
}
public JsonResult(T data, String message, boolean success) {
this.data = data;
this.message = message;
this.success = success;
}
public JsonResult(T data, String message) {
this.data = data;
this.message = message;
this.success = true;
}
public JsonResult(T data) {
this.data = data;
this.success = true;
}
}
3.控制器
在方法名前面增加@ResponseBody注解。如果Spring发现
- 项目lib库中含有Jackson包
- Spring启用了
mvc:annotation-driven
MVC注解配置 - 返回的方法使用了@ResponseBody注解
Spring 会自动进行JSON的转换。
控制器代码如下所示:
package com.lynn.blog.web;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.lynn.blog.common.JsonResult;
import com.lynn.blog.service.impl.UserServiceImpl;
import com.lynn.blog.vo.UserVO;
/**
* 用户登陆控制层
*
* @author HASEE
*
*/
@Controller
@RequestMapping("/userLogin")
public class UserLoginController {
// 日志处理
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private UserServiceImpl userServiceImpl;
@RequestMapping(value = "/createLoginInfo", method = RequestMethod.POST, produces = { "application/json;charset=UTF-8" })
public @ResponseBody JsonResult createLoginInfo(UserVO userVO) {
log.info("---------------开始记录登陆日志");
Integer flag = 0;
if (null != userVO) {
flag = userServiceImpl.createLoginInfo(userVO);
}
return new JsonResult(flag, "success",true);
}
}
4. mvc:annotation-driven 注解
在Spring配置中启用 mvc:annotation-driven
注解
在其他配置正确的情况下即可将后端的数据封装为json返回给前端