首先,Spring是没有自带json转换数据的包的,所有我们要自己导入json的包到类路径下,假如是使用Maven的话可以加入以下语句到中,还有如果你是使用SpringBoot的话不用加json的包,SpringBoot 默认会使用 Json 作为响应报文格式。(我下面是选用springboot做的,因为最近在学习springboot)
Maven的添加包(采用gson的包)
<dependency>
<groupId></groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
1、使用Spring接收json数据,要实现这点不难,只要在对应的形参对象上使用注解@RequestBody就可以了,例如
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
= username;
}
public void setPassword(String password) {
= password;
}
public String getPassword() {
return password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
然后在控制器的相应的方法的参数类型前使用@RequestBody
public User Post(@RequestBody User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
(user);
return user;
}
注意,@RequestBody一定要在形参对象的类型前面,注意,Spring会调用类路径下的json包,但是它会根据json传递的键名和变量的域的名字进行匹配,而且还必须得有get和set(javaBean)的方法。例如一旦你这里把username写成UserName,json将解析不出来。
一旦匹配成功,spring将自动把json中的参数赋值到对象中来。
2、使用Spring发送json参数,对于这点,有两个方法,一是使用@ResponseBody,二是使用@RestController
@RequestMapping(method = )
public @ResponseBody User Post(@RequestBody User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
(user);
return user;
}
@ResponseBody放在方法返回类型的前面,当加上@ResponseBody的时候,Spring会跳过正常的MVC流程,转而直接将数据以特定的形式发送的到客户端(可能是根据请求头中的数据类型)
第二种是采用将@Controller改成@RestController的形式
@Controller
@RequestMapping("/json")
public class JsonController {
@RequestMapping(method = )
public User Post(@RequestBody User user, HttpServletRequest httpServeltRequest, HttpServletResponse httpServletResponse) throws IOException {
(user);
return user;
}
}
这样的效果跟@ResponseBody一样,但是不同的是这个类(JsonController )下面的全部方法都变成非正常MVC的形式,所以两种方式要选择性使用