Java开发学习(二十六)----SpringMVC返回响应结果

news/2025/1/31 6:46:09/

SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户。

比如:根据用户ID查询用户信息、查询用户列表、新增用户等。

对于响应,主要就包含两部分内容:

  • 响应页面

  • 响应数据

    • 文本数据

    • json数据

因为异步调用是目前常用的主流方式,所以我们需要更关注的就是如何返回JSON数据。

一、环境准备

  • 创建一个Web的Maven项目

    • 参考Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制中环境准备
  • pom.xml添加Spring依赖

    <?xml version="1.0" encoding="UTF-8"?>
    ​
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
    ​<groupId>com.itheima</groupId><artifactId>springmvc_05_response</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging>
    ​<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency></dependencies>
    ​<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins></build>
    </project>
    ​
  • 创建对应的配置类

    public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getRootConfigClasses() {return new Class[0];}
    ​protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}
    ​protected String[] getServletMappings() {return new String[]{"/"};}
    ​//乱码处理@Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter filter = new CharacterEncodingFilter();filter.setEncoding("UTF-8");return new Filter[]{filter};}
    }
    ​
    @Configuration
    @ComponentScan("com.itheima.controller")
    //开启json数据类型自动转换
    @EnableWebMvc
    public class SpringMvcConfig {
    }
    ​
    ​
  • 编写模型类User

    public class User {private String name;private int age;//getter...setter...toString省略
    }
  • webapp下创建page.jsp

    <html>
    <body>
    <h2>Hello Spring MVC!</h2>
    </body>
    </html>
  • 编写UserController

    @Controller
    public class UserController {
    ​}

最终创建好的项目结构如下:

二、响应页面

步骤1:设置返回页面

@Controller
public class UserController {@RequestMapping("/toJumpPage")//注意//1.此处不能添加@ResponseBody,如果加了该注入,会直接将page.jsp当字符串返回前端//2.方法需要返回Stringpublic String toJumpPage(){System.out.println("跳转页面");return "page.jsp";}}

步骤2:启动程序测试

此处涉及到页面跳转,所以不适合采用PostMan进行测试,直接打开浏览器,输入

http://localhost/toJumpPage

三、返回文本数据

步骤1:设置返回文本内容

@Controller
public class UserController {@RequestMapping("/toText")//注意此处该注解就不能省略,如果省略了,会把response text当前页面名称去查找,如果没有回报404错误@ResponseBodypublic String toText(){System.out.println("返回纯文本数据");return "response text";}}

步骤2:启动程序测试

此处不涉及到页面跳转,因为我们现在发送的是GET请求,可以使用浏览器也可以使用PostMan进行测试,输入地址http://localhost/toText访问

四、响应JSON数据

响应POJO对象

@Controller
public class UserController {@RequestMapping("/toJsonPOJO")@ResponseBodypublic User toJsonPOJO(){System.out.println("返回json对象数据");User user = new User();user.setName("itcast");user.setAge(15);return user;}}

返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解

重新启动服务器,访问http://localhost/toJsonPOJO

响应POJO集合对象

@Controller
public class UserController {@RequestMapping("/toJsonList")@ResponseBodypublic List<User> toJsonList(){System.out.println("返回json集合数据");User user1 = new User();user1.setName("传智播客");user1.setAge(15);
​User user2 = new User();user2.setName("黑马程序员");user2.setAge(12);
​List<User> userList = new ArrayList<User>();userList.add(user1);userList.add(user2);
​return userList;}}
​

重新启动服务器,访问http://localhost/toJsonList

知识点1:@ResponseBody

名称@ResponseBody
类型方法\类注解
位置SpringMVC控制器方法定义上方和控制类上
作用设置当前控制器返回值作为响应体, 写在类上,该类的所有方法都有该注解功能
相关属性pattern:指定日期时间格式字符串

说明:

  • 该注解可以写在类上或者方法上

  • 写在类上就是该类下的所有方法都有@ReponseBody功能

  • 当方法上有@ReponseBody注解后

    • 方法的返回值为字符串,会将其作为文本内容直接响应给前端

    • 方法的返回值为对象,会将对象转换成JSON响应给前端

此处又使用到了类型转换,内部还是通过Converter接口的实现类完成的,所以Converter除了前面所说的功能外,它还可以实现:

  • 对象转Json数据(POJO -> json)

  • 集合转Json数据(Collection -> json)


http://www.ppmy.cn/news/1871.html

相关文章

图论算法(2)—————拓扑排序

在几天前写了一篇最小生成树的文章 今天再讲解一下图论的另一个算法&#xff1a;拓扑排序 注&#xff1a;今天只讲解kahn算法&#xff0c;各位如果对dfs算法有需求可联系我进行讲解 说到拓扑排序&#xff0c;不得不先了解下拓扑是个什么东东 拓扑&#xff0c;它是一种结构 …

深度学习-BN(Batch Normalization)

1. 介绍 Batch Normalization是2015年一篇论文中提出的数据归一化\color{blue}{数据归一化}数据归一化方法&#xff0c;往往用在深度神经网络中激活层之前。其作用可以加快模型训练时的收敛速度&#xff0c;使得模型训练过程更加稳定&#xff0c;避免梯度爆炸或者梯度消失。并且…

learnOpenGl

LearnOpenGl 1,入门 1.1.hello_window 创建一个800x600 的window; 1.2.hello_window_clear 利用glClearColor()/glclear() 设置窗口颜色; 2.1.hello_triangle 画一个三角形; 2.2.hello_triangle_indexed 用EBO 画一个三角形; 2.3.hello_triangle_exerc…

MySQL分区表对NULL值的处理

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;王权富贵 1.概述 MySQL的分区表没有禁止NULL值作为分区表达式的值&#xff0c;无论它是列值还是用户提供的表…

【docker】配置深度学习环境

目录基本环境搭建问题与解决容器启动后添加端口映射安装完虚拟环境后 CUDA调用不了opencv的使用问题自定义软件包的使用基本环境搭建 容器基本操作&#xff1a; # 按照服务器配置拉取对应的镜像 docker pull pytorch/pytorch:1.9.0-cuda10.2-cudnn7-devel# 查看主机端口 没有信…

JAVA中如何精确取到时间间隔

文章目录0 写在前面1 使用方法2 举例3 写在最后0 写在前面 做业务的时候&#xff0c;总要统计数据&#xff0c;几月份到几月份的全部数据。这个时候就要找到起始月份的具体时间和终止月份的具体时间。 此时我们用原始的Date类去处理就比较麻烦&#xff0c;可以自己写一个工具类…

校园论坛(Java)—— 校园周边模块

校园论坛&#xff08;Java&#xff09;—— 校园周边模块 文章目录校园论坛&#xff08;Java&#xff09;—— 校园周边模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2 校园周边页面设计3、校园周边模块设计3.1 校园周边主界面的实现3.2 增加附近的交通信息4. 总…

微服务守护神-Sentinel-概念

引言 书接上篇 微服务应对雪崩的容错方案 &#xff0c;大概知道微服务容错方案可以从隔离、超时、限流、熔断、降级这几方面入手。好了&#xff0c;理论了解了&#xff0c;那代码落地方案&#xff1f;这是后本篇的主角要登陆场&#xff1a;Sentinel&#xff0c;微服务的守护神…