当前位置: 首页 > article >正文

SpringMVC-响应数据

一、引子

我们在上一篇文章SpringMVC-组件解析里介绍了SpringMVC框架执行一个请求的过程,并演示了快速使用Controller承接请求。本篇我们将深入介绍SpringMVC执行请求时,如何响应客户端。

二、响应类型

SpringMVC的数据响应方式主要分为两类(1)页面跳转(2)返回数据。其中,对于(1)页面跳转:又包括直接返回字符串与通过返回ModelAndView对象。对于(2)返回数据:又包括返回普通的字符串与返回集合/对象。

三、页面跳转

页面跳转都是前后端不分离的做法,所以这部分我们简单介绍一下。

(1)返回字符串

返回字符串的方式自我们介绍SpringMVC以来便一直是以这种方式来演示的,所以我们在这里就不再重复演示了。

(2)返回ModelAndView

我们先来做一个简单的回顾:读者是否还记得在JavaWeb阶段,我们声明一个类,然后继承HttpServlet。在重写doPost或doGet方法时形参为HttpServletRequest req, HttpServletResponse resp。我们提到doPost与doGet方法是由谁来调用呢,参数req与resp又是如何传入方法的呢。如果忘记了可以回顾Servlet执行流程与Servlet体系结构两篇文章。答案是由Web容器(如Tomcat)来调用与传参的。

在SpringMVC中也是,我们可以在Controller的方法中传入ModelAndView对象,Model对象,甚至是HttpServletRequest、HttpServletResponse等类型的对象。SpringMVC都会在调用时为你传入这些对象。示例如下:

    @RequestMapping("/model")
    public ModelAndView model(ModelAndView modelAndView) {
        modelAndView.setViewName("success");
        return modelAndView;
    }

又如:

  @RequestMapping("/http")
    public String model(HttpServletRequest httpServletRequest) {
        System.out.println(httpServletRequest);
        httpServletRequest.setAttribute("username", "zhangsan");
        return "success";
    }
四、回写数据

回写数据需要用@ResponseBody注解修饰类或方法,表明不进行视图跳转,而是需要返回数据。

(1)回写普通字符串
    @RequestMapping("/return")
    @ResponseBody
    public String returnData() {
        return "return";
    }
(2)回写对象

返回对象数据需要JSON序列化,还需要在处理器适配器中配置数据转换器:

添加依赖

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.databind/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.10</version>
        </dependency>

是否还记得在SpringMVC-组件解析中介绍的处理器适配器(HandlerAdapter),在其中配置一个属性:配置数据转换器。这有点类似于在视图解析器配置视图的前后缀。(请读者回顾SpringMVC-组件解析)

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
            </list>
        </property>
    </bean>

Controller中方法:

    @RequestMapping("/user")
    @ResponseBody
    public User returnObject() {
        User user = new User();
        user.setName("zhangsan");
        user.setAge(23);
        return user;
    }
五、总结

至此我们完成了SpringMVC-响应的介绍,请读者继续关注,笔者将在下一篇文章中为大家介绍SpringMVC-请求的介绍。届时将可以利用SpringMVC框架完成大部分的请求与响应啦~


http://www.kler.cn/a/231557.html

相关文章:

  • 京东 2025届秋招 自然语言处理
  • Jaskson处理复杂的泛型对象
  • BERT模型中的嵌入后处理与注意力掩码
  • 在Qt(以及C++)中, 和 * 是两个至关重要的符号--【雨露均沾】
  • Vscode/Code-server无网环境安装通义灵码
  • 在云服务器搭建 Docker
  • 【Docker】Docker Image(镜像)
  • 微信小程序解决华为手机保存图片到相册失败
  • jsp课程管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 代码随想录算法训练营第42天 | 01背包理论基础 416.分割等和子集
  • 拿捏循环链表
  • 【状态管理一】概览:状态使用、状态分类、状态具体使用
  • 项目部署小问题记录
  • python实现飞书群机器人消息通知(消息卡片)
  • 建设一个私有知识库问答网站
  • spring boot和spring cloud项目中配置文件application和bootstrap加载顺序
  • vue 实现一个持续时间定时器组件
  • uniapp中配置开发环境和生产环境
  • 深入解析 Spring 事务机制
  • ChatGPT论文指南|ChatGPT论文写作过程中6个润色与查重提示词
  • 机器学习--K-近邻算法常见的几种距离算法详解
  • 【算法题】96. 不同的二叉搜索树
  • Fink CDC数据同步(二)MySQL数据同步
  • Debian系统中挂载一个数据盘
  • 单片机向PC发送数据
  • C++之多线程(multi-thread)