和开振学Spring boot 3.0之Spring MVC:②使用JSON

上篇我们谈到了Spring MVC的全流程,并且我实现了一个Controller,并从请求到Thymeleaf视图讲了个遍。接下来,我们来谈JSON,因为现在前后端分离,最常用的基本就是JSON了。请求某个链接,然后返回JSON,通过前端,比如JS脚本就能轻松获取和解析数据,然后展示给用户,这就是前后端的集合。

为了让大家继续熟悉流程,我先使用MappingJackson2JsonView,虽然它不常用,我的目标只是让你熟悉Spring流程,而不是其他。更加普遍使用的是@ResponseBody,这个我也会介绍,只是原理我后续再介绍。

1、使用MappingJackson2JsonView

从MappingJackson2JsonView的名称看,就知道它是一个关于JSON的视图,作为程序员,首先需要“望文生义”,懂得大体的含义,然后再用好它。好了我们开始。在上一篇的UserController.java中增加方法,如下。

// 路由,让请求能映射到处理器
@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对象了。

运行程序,然后访问:http://localhost:8080/user/json/details?id=12

就可以看到如下结果了:

 可见,我们已经看到了结果是一个JSON数据集。然后,我再画出Spring MVC的流程图,如下。

JSON视图全流程
​​​​​

 这里我就不再像上篇那样写得那么详细了,主要是点出要讲解的内容。对比下,你会发现少了视图解析器(ViewResolver),因为我们的JSON视图并不需要去定位视图,而是直接把数据模型转换为JSON视图就可以了,正如我说的Spring MVC不一定需要走全流程,而是根据需要来的,切记切记。只是在初学阶段,我和你谈全流程而已。

2、使用@ResponseBody展示JSON数据集

严格来说MappingJackson2JsonView并不是一个常用的数据集,更常用的是@ResponseBody,它标注将控制器返回的对象转化为JSON数据集。

我们修改上面的userJsonDetails()方法,如下:

扫描二维码关注公众号,回复: 14670421 查看本文章
@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,这里有点复杂,我后面再介绍原理,它其实是处理器(包装了控制器逻辑)内部会进行处理。

运行程序,然后访问:http://localhost:8080/user/json/details2?id=12

就可以看到如下结果了:

可见运行又成功了。

以后,我们就使用@ResponseBody这个注解来简化我们的编程了。

猜你喜欢

转载自blog.csdn.net/ykzhen2015/article/details/129830023