和开振学Spring boot 3.0之Spring MVC:②使用JSON
上篇我们谈到了Spring MVC的全流程,并且我实现了一个Controller,并从请求到Thymeleaf视图讲了个遍。接下来,我们来谈JSON,因为现在前后端分离,最常用的基本就是JSON了。请求某个链接,然后返回JSON,通过前端,比如JS脚本就能轻松获取和解析数据,然后展示给用户,这就是前后端的集合。
为了让大家继续熟悉流程,我先使用MappingJackson2JsonView,虽然它不常用,我的目标只是让你熟悉Spring流程,而不是其他。更加普遍使用的是@ResponseBody,这个我也会介绍,只是原理我后续再介绍。
1、使用MappingJackson2JsonView
// 路由,让请求能映射到处理器 @RequestMapping("/user/json/details") public ModelAndView userJsonDetails(Long id) { // 模型与视图 var mav = new ModelAndView(); var user = new User(); user.setId(id); user.setUserName("user_name_" + id); user.setNote("note_" + id); // 创建JSON视图 var jsonView = new MappingJackson2JsonView(); // ① // 设置视图 mav.setView(jsonView); // ② // 添加数据模型 mav.addObject(user); return mav; }
这段代码①出是创建JSON视图,也就是这次我不是使用Thymeleaf视图了,我要用JSON视图,然后在代码②出,设置ModelAndView为JSON视图,这样控制器就知道你要使用的是JSON视图了。最后绑定视图模型,然后就可以返回ModelAndView对象了。
运行程序,然后访问:
就可以看到如下结果了:
可见,我们已经看到了结果是一个JSON数据集。然后,我再画出Spring MVC的流程图,如下。
这里我就不再像上篇那样写得那么详细了,主要是点出要讲解的内容。对比下,你会发现少了视图解析器(ViewResolver),因为我们的JSON视图并不需要去定位视图,而是直接把数据模型转换为JSON视图就可以了,正如我说的Spring MVC不一定需要走全流程,而是根据需要来的,切记切记。只是在初学阶段,我和你谈全流程而已。
2、使用@ResponseBody展示JSON数据集
严格来说MappingJackson2JsonView并不是一个常用的数据集,更常用的是@ResponseBody,它标注将控制器返回的对象转化为JSON数据集。
我们修改上面的userJsonDetails()方法,如下:
@RequestMapping("/user/json/details2") @ResponseBody // 标注控制器返回转换为JSON数据集 public User userJsonDetails2(Long id) { var user = new User(); user.setId(id); user.setUserName("user_name_" + id); user.setNote("note_" + id); // 返回需要转换为JSON数据集的数据 return user; }
这里方法标注了@ResponseBody,表示将控制器的方法返回结果转变为JSON。这里不注意不再使用视图技术将结果转换为JSON,这里有点复杂,我后面再介绍原理,它其实是处理器(包装了控制器逻辑)内部会进行处理。
运行程序,然后访问:
就可以看到如下结果了:
可见运行又成功了。
以后,我们就使用@ResponseBody这个注解来简化我们的编程了。