系列文章目录
【SpringMVC系列】@RequestMapping注解 详解
【SpringMVC系列】HiddenHttpMethodFilter 过滤器配置实例及源码分析
【前言】
今天介绍一下json的基础知识,和mvc是如何处理json的
一、json操作
(一)什么是json
(1)json是一种数据交互格式
(2)json结构 key-value
(3)结构简单,操作方便
(二)json数据格式
(1)对象格式
{"username":"lucy" , "age":20}
(2)数组格式
["aa","bb"]
[{"username":"lucy" , "age":20},{"username":"mary" , "age":30}]
(3)在实际应用中,json一般都是两种格式混合使用
{ "name":"books",
"data":
[{"username":"lucy" , "age":20},{"username":"mary" , "age":30}]
}
(三)json转换工具fastjson
常用转换工具:
gson(谷歌)、fastjson(阿里) 、jsonlib 、jackson(Springmvc内置)
(1)fastjson工具使用
第一步 导入fastjson的jar包
第二步 创建controller方法,通过fastjson转换json数据,向页面输出
将对象转成json:
@Controller
@RequestMapping("/json")
public class TestJsonController {
//通过fastjson转换json数据,向页面输出
@RequestMapping("/fastjson")
public String testFastjson(HttpServletResponse response) throws IOException {
//创建user对象,设置值
User user = new User();
user.setId("1");
user.setUsername("lili");
user.setPassword("111");
//把user对象转换为json数据
String resultJson = JSON.toJSONString(user);
//把resultJson输入到页面中,使用response
response.getWriter().write(resultJson);
return null;
}
}
将集合转成json:
@Controller
@RequestMapping("/json")
public class TestJsonController {
//通过fastjson转换json数据,向页面输出
@RequestMapping("/fastjsonlist")
public String testFastjsonList(HttpServletResponse response) throws IOException {
//创建user对象,设置值
User user = new User();
user.setId("1");
user.setUsername("lili");
user.setPassword("111");
User user1 = new User();
user1.setId("2");
user.setUsername("qiqi");
user.setPassword("222");
ArrayList<User> list = new ArrayList<>();
list.add(user);
list.add(user1);
//把user对象转换为json数据
String resultJson = JSON.toJSONString(user);
//把resultJson输入到页面中,使用response
response.getWriter().write(resultJson);
return null;
}
}
第三步 展示结果
将对象转成json:
将集合转成json:
二、处理json
总结:jar包+注解+返回类型+mvc配置
(1)导入jackson的jar包
(2)在controller方法添加注解—— @ResponseBody
@ResponseBody
注解:可以写在类上面,如果写在类上面,类里面所有方法向页面输出内容
(而不是跳转页面。如:return “success”,指的不是跳转到 success.jsp 页面,而是返回这个字符串);
@RestController
注解:包含两个注解 @Controller
和 @ResponseBody
注:写这一个,和同时写它包含的这两个注解,效果是一样的。
(3)在spring配置文件添加配置
<mvc:annotation-driven></mvc:annotation-driven>
(4)把controller方法返回类型改为实际类型
如果返回的是对象,就把方法返回类型换成对象名称,如果是集合就换成集合名称
①返回对象类型
//springmvc处理json
@ResponseBody
@RequestMapping("/jsondemo1")
public User getJsonDemo1(){
//创建user对象,设置值
User user = new User();
user.setId("1");
user.setUsername("lucy");
user.setPassword("123");
return user;
}
②返回集合类型
//springmvc处理json
@ResponseBody
@RequestMapping("/jsondemo2")
public List<User> getJsonDemo2(){
//创建user对象,设置值
User user = new User();
user.setId("1");
user.setUsername("lili");
user.setPassword("111");
User user1 = new User();
user1.setId("2");
user.setUsername("qiqi");
user.setPassword("222");
ArrayList<User> list = new ArrayList<>();
list.add(user);
list.add(user1);
return list;
}
(5)结果
①返回对象的json格式
②返回集合的json格式
(6)springmvc处理json底层原理
-
HttpMessageConverter<T>
是 Spring3.0 新添加的一个接口,
负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息 -
springmvc进行json转换使用转换器
MappingJackson2HttpMessageConverter
HttpMessageConverter原理
1) HttpMessageConverter 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息。
2) HttpMessageConverter接口定义的方法:
① Boolean canRead(Class<?> clazz,MediaType mediaType)
: 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json等)。
② Boolean canWrite(Class<?> clazz,MediaType mediaType)
:指定转换器是否可将clazz 类型的对象写到响应流中,响应流支持的媒体类型在MediaType 中定义。
③ List<MediaType> getSupportMediaTypes()
:该转换器支持的媒体类型。
④ T read(Class<? extends T> clazz,HttpInputMessage inputMessage)
:将请求信息流转换为 T 类型的对象。
⑤ void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage)
:将T类型的对象写到响应流中,同时指定相应的媒体类型为 contentType。
json的介绍就告一段落啦~
感谢阅读哇~