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