Json处理
springMVC默认的Json解决方案选择是 Jackson,所以只需要导入jackson的jar,即可使用。
注意:spring4中,要在tomcat中选择jdk7或jdk8
1 导入依赖
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- FastJson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
2 使用@ResponseBody
@RequestMapping("/test1")
@ResponseBody //将handler的返回值,转换成json(jackson),并将json响应给客户端。
public User hello1(){
System.out.println("hello world");
User user = new User();
return user;
}
//@ResponseBody还可以用在handler的返回值上
@RequestMapping("/test2")
public @ResponseBody List<User> hello2(){
System.out.println("hello world");
List<User> users = Arrays.asList(new User(),new User());
return users;
}
3 日期格式化
@JsonFormat(pattern=“yyyy-MM-dd HH:mm:ss”)
public class User implements Serializable{
private Integer id;
private String name;
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date birth;
....
4 FastJson
如果不想使用Jackson,则也可以安装其他的 Json处理方案:FastJson
安装FastJson
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- 声明转换类型:json -->
<property name="supportedMediaTypes">
<list>
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
使用
@RequestMapping("/test1")
@ResponseBody //将handler的返回值,转换成json(jackson),并将json响应给客户端。
public User hello1(){
System.out.println("hello world");
User user = new User();
return user;
}
//@ResponseBody还可以用在handler的返回值上
@RequestMapping("/test2")
public @ResponseBody List<User> hello2(){
System.out.println("hello world");
List<User> users = Arrays.asList(new User(),new User());
return users;
}
// produces 设置响应头,避免中文乱码
@RequestMapping(value="/test3",produces = "text/html;charset=utf-8")
@ResponseBody //方法的返回值,会被自动转成json,并相应给客户端
public String test3(){
System.out.println("json test3");
return "臧红久";
}
日期格式化
@JSONField(format=“yyyy/MM/dd”)
public class User implements Serializable{
private Integer id;
private String name;
@JSONField(format="yyyy/MM/dd")
private Date birth;
...
5 @RestController
@RestController // 等价于在本类的所有Handler中都添加了@ResponseBody
@RequestMapping("/json")
public class MyController {
@RequestMapping("/test1")
public User queryOneUser(Integer id){
....
}
}
6 使用@RequestBody
@RequestBody, 接收Json参数
@RequestMapping("/users")
public String addUser(@RequestBody User user){//@RequestBody将请求体中的json数据转换为java对象
System.out.println("cap2");
System.out.println("Post user :"+user);
return "index";
}
var xhr = new XMLHttpRequest();
xhr.open("post","${pageContext.request.contextPath}/users?"+new Date().getTime());
xhr.setRequestHeader("content-type","application/json");//设置请求头
xhr.send('{"id":1,"name":"臧红久","gender":"true","registTime":"2019-12-12"}');//传递json串