接上一篇:springMVC-静态资源
Json处理
1. 导入依赖
因是com.fasterxml.jackson.core:xxxx jar包与项目Spring框架的版本不一致会报错
例如:
Spring版本:5.0.3.RELEASE 对应 jackson版本:2.9.4
或者
Spring版本:4.1.7.RELEASE 对应 jackson版本:2.5.4
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
- springMVC默认的Json解决方案就是Jackson,所以只要导入jar包就行了
2. @ResponseBody
2.1 定义Handler
@Controller
@RequestMapping("/join")
public class HelloController {
@RequestMapping("/test1")
@ResponseBody
public User test(){
User user = new User(1,"lyx","2234",new Date());
return user;
}
}
- 这个注解:@ResponseBody的意思就是,把当前Handler,也就是这个test方法的返回值自动转成json格式
- 这个方法的返回值无论是什么类型,只要加了这个注解@ResponseBody,都会被转成json格式,当然如果方法返回值是String类型,就不用转化了,直接返回就行了
- 方法返回值为String
@Controller
@RequestMapping("/join")
public class HelloController {
@RequestMapping(value = "/test",produces = "text/html;charset=utf-8")
@ResponseBody
public String test1(){
System.out.println("test1");
return "你好";
}
}
Tomcat运行,访问路径为:http://localhost:8080/join/test
- 注意如果返回值是中文的话,注解@RequestMapping(),要多加一个属性值produces
@RequestMapping(value = “/test”,produces = “text/html;charset=utf-8”)
3. @RestController
加了这个注解,意思是对当前类的每一个handler都追加@ResponseBody这个注解,同时@Controller也不写
3.1 定义Handler
//@Controller
@RequestMapping("/join")
@RestController
public class HelloController {
@RequestMapping(value = "/test",produces = "text/html;charset=utf-8")
// @ResponseBody
public String test1(){
System.out.println("test1");
return "你好";
}
@RequestMapping("/test1")
// @ResponseBody
public User test(){
User user = new User(1,"lyx","2234",new Date());
return user;
}
}
4. @RequestBody
使用@RequestBody,接收Json参数
4.1 定义Handler
public class User {
private int id;
private String username;
private String password;
private Date birth;
//set get
}
@RequestMapping("/users")
public String addUser(@RequestBody User user){
System.out.println(user);
return "ok!";
}
4.2 定义jsp页面
- 先复制jquery-3.5.1.js到webapp目录下的static/js文件夹下:
- mvc.xml加上访问静态资源的:<mvc:default-servlet-handler/>
- Controller
@RequestMapping("/json")
@RestController
public class JSONController {
@RequestMapping("/test1")
public String test(@RequestBody String user){
User user1 = JSON.parseObject(user, User.class);
System.out.println(user1);
return "index";
}
}
- testJSON.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<script src="${pageContext.request.contextPath}static/js/jquery-3.5.1.js"/>
</head>
<body>
<input type="button" value="点击" onclick="hhh();"/>
<script>
function hhh() {
var a = {"id":1,username:"lyx",password:"23453",birth:"2000/09/09"};
var obj = JSON.stringify(a);
$.ajax({
url:"${pageContext.request.contextPath}/data/users",
type:"post",
data:obj,
contentType:"application/json",
success:function (ret) {
alert(ret);
}
});
}
</script>
</body>
</html>
- Tomcat运行,访问http://localhost:8080/testJSON.jsp
报错了???找不到jquery-3.5.1?—>去项目里面clean一下,然后重新编译
- Tomcat运行,访问http://localhost:8080/testJSON.jsp
- 控制台输出
5. Jackson常用注解
总结:Jackson常用注解