SpringMvc(json处理)
- 1、SpringMvc返回Json数据
- 1.1、@ResponseBody
- 1.2、Jackson
- 1.2.1、pom依赖引入
- 1.2.2、实体类
- 1.2.3、控制器
- 1.3、@JsonIgnore
- 1.4、@JsonFormat
- 1.5、consumes
- 2、SpringMvc获取Json数据
- 2.1、单个参数的传递
- 2.2、实体参数的传递
- 2.3、传入模型用Map接收
1、SpringMvc返回Json数据
1.1、@ResponseBody
方法上加上这个注解之后,return返回的东西就会成为一个字符串,而不是一个jsp页面。
@Controller
public class JsonController {
@RequestMapping("/json")
@ResponseBody
public String json(){
System.out.println("json");
return "json";
}
}
如果我们返回一个其它的非String对象则会报错,就比如返回一个json,就会报错,那我们现在需要它返回一个json对象,那么我们就需要使用jackson(用来解析 JSON 的框架)。详情看1.2。
1.2、Jackson
1、首先我们需导入几个jar包,jackson-core和jackson-databind、jackson-annotations。
2、将导入进来的jar包put到lib文件夹中。
3、在对应的处理方法上加上@ResponseBody注解或者在类上面加上@RestController注解。
spring的配置文件一定要有annotation-driven配置:
<mvc:annotation-driven></mvc:annotation-driven>
代码示例如下:
1.2.1、pom依赖引入
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.3</version>
</dependency>
1.2.2、实体类
private Integer id;
private String name;
1.2.3、控制器
@Controller
@RestController // 该类中所有的处理方法都会以json字符串的形式进行返回
public class JsonController {
@RequestMapping("/json")
@ResponseBody
public List json(){
List<User> list = new ArrayList();
list.add(new User(1,"小乐乐"));
list.add(new User(2,"大乐乐"));
return list;
}
}
1.3、@JsonIgnore
注解是加在实体类上面的,SpringMvc可以在返回Json数据时,忽略此属性,也就是不向前段返回此字段的信息。
代码、结果截图示例如下:
private Integer id;
private String name;
@JsonIgnore
private String password;
private String address;
@Controller
@RestController // 该类中所有的处理方法都会以json字符串的形式进行返回
public class JsonController {
@RequestMapping("/json")
public User json(){
User user = new User(1,"小乐乐","123456","陕西省西安市");
return user;
}
}
1.4、@JsonFormat
用于实体类上,格式化数据
示例:
@JsonFormat(pattern = "yyyy-mm-dd")
private Date birthday;
1.5、consumes
可设置请求数据格式
示例:
@PostMapping(value = "requestJson02",consumes = "application/json")
public User requestJson02(@RequestBody User user){
System.out.println(user);
return user;
}
2、SpringMvc获取Json数据
2.1、单个参数的传递
@PostMapping("/json/request01")
public User requestJson(@RequestBody String name){
User user = new User(1,"小乐乐","123456","陕西省西安市");
System.out.println(name);
return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<%-- 引入静态资源文件 --%>
<script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
<%-- jquery脚本 --%>
<script type="text/javascript">
/*页面加载函数*/
$(function () {
$.ajax({
url:"${pageContext.request.contextPath}/json/request01",
method:"post",
data:"小乐乐",
// 默认会以form的内容提交,application/x-www-form-urlencoded
// 如果是form的提交方式,传参就是"name=小乐乐&id=1"
// 如果是 application/json ,则可以以json的方式传递参数
contentType:"application/json",
dataType:"json",
success:function (result) {
alert(result.address);
}
})
})
</script>
</head>
<body>
$END$
</body>
</html>
2.2、实体参数的传递
@PostMapping("requestJson02")
public User requestJson02(@RequestBody User user){
System.out.println(user);
return user;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<%-- 引入静态资源文件 --%>
<script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
<%-- jquery脚本 --%>
<script type="text/javascript">
/*页面加载函数*/
$(function () {
$("#btnTwo").click(function () {
var user = {
"id":"1999",
"name":"HaHa"
};
$.ajax({
url:"${pageContext.request.contextPath}/requestJson02",
method:"post",
data:JSON.stringify(user),
// 默认会以form的内容提交,application/x-www-form-urlencoded
// 如果是form的提交方式,传参就是"name=小乐乐&id=1"
// 如果是 application/json ,则可以以json的方式传递参数
contentType:"application/json",
dataType:"json",
success:function (result) {
alert("sss");
}
})
})
})
</script>
</head>
<body>
<input type="button" value="传入单个数据点击事件" id="btnOne">
<input type="button" value="传入模型点击事件" id="btnTwo">
</body>
</html>
2.3、传入模型用Map接收
@PostMapping("requestJson03")
public Map requestJson03(@RequestBody Map<String,String> map){
System.out.println(map);
return map;
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
<%-- 引入静态资源文件 --%>
<script src="https://cdn.staticfile.org/jquery/1.10.0/jquery.min.js"></script>
<%-- jquery脚本 --%>
<script type="text/javascript">
/*页面加载函数*/
$(function () {
$("#btnThree").click(function () {
var user = {
"id":"1999",
"name":"HaHa"
};
$.ajax({
url:"${pageContext.request.contextPath}/requestJson03",
method:"post",
data:JSON.stringify(user),
// 默认会以form的内容提交,application/x-www-form-urlencoded
// 如果是form的提交方式,传参就是"name=小乐乐&id=1"
// 如果是 application/json ,则可以以json的方式传递参数
contentType:"application/json",
dataType:"json",
success:function (result) {
alert("sss");
}
})
})
})
</script>
</head>
<body>
<input type="button" value="传入单个数据点击事件" id="btnOne">
<input type="button" value="传入模型点击事件" id="btnTwo">
<input type="button" value="传入模型用Map接收点击事件" id="btnThree">
</body>
</html>