SpringMVC:RestFul 风格、实现请求转发和重定向、乱码问题解决、前后端传递参数、JSON 字符串

文章目录

  • SpringMVC - 02
  • 一、RestFul 风格
    • 1. 概述
    • 2. 实现
    • 3. 结果
  • 二、请求转发和重定向
  • 三、乱码问题
    • 补充知识
  • 四、前后端传递参数
  • 五、JSON
    • 1. 概述
    • 2. Jackson
    • 3. fastjson
    • 4. 总结
  • 注意:

SpringMVC - 02

一、RestFul 风格

1. 概述

  1. RestFul 是一个资源定位以及资源操作的风格

  2. 基于 RestFul 风格设计的软件简洁,有层次,易于实现缓存等机制;

  3. 相同的请求地址,通过不同的请求方式操作资源可以实现不同的效果,请求方式有:POST(添加)、DELETE(删除)、PUT(修改)、GET(查询);

  4. 所有地址栏的请求方式默认为 GET 类型;

  5. 用到的注解有:

注解说明
@PathVariable让方法参数的值对应绑定到一个 URL 模板变量上
@RequestMapping(value = “请求地址”, method = RequestMethod.请求方式)通过指定的请求方式请求地址
@GetMapping(“请求地址”)组合注解,通过 Get 方式请求地址
@PostMapping(“请求地址”)组合注解,通过 Post 方式请求地址

注意

  1. 注解 @PathVariable 声明在指定参数上,这样就可以在请求地址中用 {参数} 与方法中的指定参数绑定
  2. 注解 @GetMapping、@PostMapping、@DeleteMapping、@PutMapping 等是组合注解,声明在方法上,是对 @RequestMapping 注解的简化,作用都是:通过指定的请求方法来请求地址。

2. 实现

实现 RestFul 风格方法

  • 将注解 @PathVariable 声明在指定参数上;
  • 指定请求方式来请求地址:
    • 方式一:使用注解 @RequestMapping 中的 method 属性来指定请求方式,注意:此时需要在请求地址前加上 value
    • 方式二:使用组合注解 @GetMapping、@PostMapping 等来指定请求方式。

3. 结果

之前在前端传入参数时,用 ? 传参,多个参数之间用 & 连接

现在使用 RestFul 风格传入参数,不需要写参数名


二、请求转发和重定向

通过 SpringMVC 实现请求转发重定向方法:

  • 请求转发:return + "页面名"

  • 重定向:return + "redirect:/页面名.jsp"

注意

  1. 请求转发时,视图解析器会自动在页面名上添加前缀和后缀,从而形成一个完成的路径;
  2. 重定向时,不能访问 WEB-INF 下的页面。

请求转发

重定向


三、乱码问题

可能出现乱码的原因

  • 后台编码存在问题;
  • 提交方式不同导致乱码,如用 GET 方式提交时不乱码,而用 POST 方式提交时乱码。

解决方法:使用 SpringMVC 提供的乱码过滤器,在 web.xml 中进行配置

<!-- 配置 SpringMVC 的乱码过滤器 -->
<filter>
    <filter-name>encoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

举例:用 POST 方式提交表单时显示乱码,通过配置过滤器解决乱码问题。

出现乱码

配置过滤器解决乱码问题


补充知识

  1. 出现乱码的原因还可能是客户端乱码,此时,只需要改变客户端界面显示的编码即可。
  2. 解决 Tomcat 显示的乱码方法:找到 Tomcat\apache-tomcat-8.5.85\conf 路径:
    • 打开 server.xml 文件,在 Connector 标签中添加属性 URIEncoding = "UTF-8"
    • 打开 logging.properties 文件,注释掉之前的,并增加 java.util.logging.ConsoleHandler.encoding = GBK


四、前后端传递参数

接收请求参数三种情况

  1. 提交的域名称和处理方法的参数名一致:不需要处理;
  2. 提交的域名称和处理方法的参数名不一致:在处理方法的参数前加注解 @RequestParam 声明;
  3. 提交的是一个对象,处理方法的参数也使用对象:要求提交的名称与对象的属性名一一对应

数据回显可以使用的三种对象

  1. Model :相当于 ModelMap 的精简版,经常使用
  2. ModelMap :继承了 LinkedHashMap,拥有 LinkedHashMap 的全部功能
  3. ModelAndView :可以存储数据的同时,也可以设置返回的逻辑视图,进行页面的跳转。

注意:注解 @PathVariable 和 @RequestParam 的区别:

  • 相同点:都是声明在方法的参数上;
  • 不同点
    • @PathVariable 是 RestFul 风格中使用,让方法参数的值对应绑定到一个 URL 模板变量上,此时需要在请求地址中用 {参数} 与方法中的指定参数绑定,使用见第一部分;
    • @RequestParam 可以解决提交的域名称与方法的参数名不一致时,接收不到参数的问题,最好都写上,使用见第三部分。

五、JSON

1. 概述

  1. JSON:JavaScript Object Notation,JS 对象标记,是一种轻量级的数据交换格式,在前后端分离中使用广泛;
  2. JSON 采用文本格式来存储和表示数据;
  3. JSON 就是一个字符串格式为:键名用双引号包裹,使用冒号分隔,然后是值,例如:{"name":"Sun3285","age":23}
  4. 优点:易于阅读和编写,也易于机器解析和生成,提升了网络传输效率;
  5. 使用 JSON 要记得处理乱码问题
  6. 实现 JSON 的转换方法有很多,最后的实现结果是一样的,其中 Jackson 是目前比较好的 JSON 解析工具

2. Jackson

使用 Jackson 需要用到 ObjectMapper 对象,分为两步

  1. 创建 ObjectMapper 对象:ObjectMapper mapper = new ObjectMapper()
  2. 对象调用 writeValueAsString 方法将任意对象转换为 JSON 字符串:mapper.writeValueAsString(object)

具体步骤

  • 新建普通 Maven 模块,转为 Web 项目,导入 jackson-databind 依赖,在项目结构中添加 lib 目录
<!-- jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.14.1</version>
</dependency>
  • 配置 web.xmlspring-mvc.xml (通过配置处理乱码问题)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 配置 DispatcherServlet 前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- DispatcherServlet 绑定 Spring 的配置文件 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!-- 启动级别:1,和服务器一起启动 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>


    <!-- 配置 SpringMVC 的乱码过滤器 -->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 自动扫描包,让指定包下的注解生效,由 IOC 容器统一管理 -->
    <context:component-scan base-package="com.Sun3285"/>

    <!-- 让 SpringMVC 不处理静态资源 -->
    <mvc:default-servlet-handler/>

    <!-- 支持注解驱动 -->
    <mvc:annotation-driven/>

    <!-- 视图解析器 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- JSON 乱码问题配置 -->
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

</beans>
  • 编写控制类,在方法中新建一个 ObjectMapper 对象,调用方法将任意对象转换为 JSON 字符串

注意:这里也可以把重复代码封装到工具类中,从而调用方法来得到 JSON 字符串。

  • 配置 Tomcat,运行

3. fastjson

fastjson 是阿里开发的 jar 包,也可以得到 JSON 字符串。

需要导入的依赖如下:

<!-- fastjson2 -->
<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.23</version>
</dependency>

可以调用的方法有:

方法名说明
toJSONString(Object object)静态方法,将 Java 对象转为 JSON 字符串
parseObject(String str, Class objectClass)静态方法,将 JSON 字符串转为 Java 对象

注意

  1. 两个方法都为静态方法,由 JSON 类直接调用;
  2. parseObject 方法中的第二个参数为 Class 类,如:User.class
  3. JSON 类中还有其他方法,用到的时候去查。

使用

4. 总结

  1. JSON 就是一个字符串

  2. 使用 JSON 要记得处理乱码问题,在 spring-mvc.xml 配置文件中统一配置;

  3. 用到的注解

    • @RestController :声明在类上,作用:表示这个类是控制类,并且其中所有方法的返回值都不会经过视图解析器,而是直接返回一个字符串,相当于注解 @Controller 和 @ResponseBody 的结合;
    • @ResponseBody :声明在方法上,作用:方法中的返回值不会经过视图解析器,而是直接返回一个字符串,和注解 @Controller 配合使用。

注意:

  1. SpringMVC 默认将数据放在 request 域中,例如,用 Model 对象保存数据,会将数据放在 request 域中,数据只在一次请求中有效,此时在重定向时,就不会得到保存的数据。解决办法:可以在控制类上加注解 @SessionAttributes("变量") 声明,这样就会将变量存放在 session 域,数据在一次会话中有效,重定向时也可以得到数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261147.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt前端技术:3.QSS字体样式

small-caps就是让这个文本中的小写字母用大写的形式写出来并且在用大写的形式表达出来后他本身的大小会变小 有绝对尺寸和相对尺寸的区别 绝对尺寸一般是cm&#xff0c;英寸之类的 相对尺寸如px之类的是由显示器的屏幕分辨率来决定的 如windows用户分辨率一般是96像素点每英…

SpringBoot 集成redis及开发使用、redis客户端工具、redis服务器安装配置、redis启动运行

一 导入redis包 <!--redis数据库--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--spring2.0集成redis所需common-pool2--><depend…

Axure之交互样式事件动作及情形(详细案例分析)

目录 一.交互样式 1.1 交互样式的作用 1.2 案例 二.交互事件 2.1交互事件的作用 2.2 案例 2.3 独属事件 三.交互动作 3.1 案例 四.情形 4.1 以分数等级为例 4.1.2 案例 4.2 下拉列表的情形案例 五.案例 5.1 erp登录的跳转 5.2 erp的界面跳转 5.3 省市联动 5.4 滚动…

青少年CTF-qsnctf-Web-登陆试试

题目环境&#xff1a; 题目难度&#xff1a;★题目描述&#xff1a;Syclover用户忘了他的密码&#xff0c;咋办哦,依稀记得密码为6位数字,以774开头&#xff0c;这次我们来爆爆他的密码&#xff0c;让他再也不犯相同的错了 先不着急进行爆破 看看源码里面有没有其它有用的信息 …

用JVS低代码实现业务流程的撤回和重新开始

在当今的数字化时代&#xff0c;业务流程的效率和准确性对于企业的运营至关重要。在实际业务场景中&#xff0c;我们可能需要处理一些复杂的流程&#xff0c;例如申请审批流程、合同签订流程等。这些流程在执行过程中可能会遇到各种情况&#xff0c;例如某个审批步骤需要重新审…

BindingResult 穿越校验 合并统一异常拦截校验

问题场景&#xff1a; 项目前后端对接时&#xff0c;前端调用服务端接口进行入参校验时&#xff0c;服务器和浏览器需要进行双向校验。在统一传参对象时&#xff0c;需要对一些入参字段进行判空&#xff0c;判长度&#xff0c;格式校验 第一种方案可以直接在对象实体的字…

Windows11编译VTM源码生成Visual Studio 工程

VTM介绍 VTM作为H266/VVC标准的官方参考软件&#xff0c;一直用作H266/VVC标准的研究和迭代。关于H2666/VVC标准的介绍、代码、提案、文档等&#xff0c;可以参考H266/VVC编码标准介绍。 官方代码地址&#xff1a; https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM&…

补题与周总结:leetcode第 376 场周赛

文章目录 复盘与一周总结2967. 使数组成为等数数组的最小代价&#xff08;中位数贪心 回文数判断&#xff09;2968. 执行操作使频率分数最大&#xff08;中位数贪心 前缀和 滑窗&#xff09; 复盘与一周总结 wa穿了第3题&#xff0c;赛时其实想到了思路&#xff1a;中位数贪心…

用友U8+CRM help2 任意文件读取漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 help2接口处存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取到服…

acl过滤报文配置(hcia)

放火墙就是这样的 原理 问控制列表ACL&#xff08;Access Control List)是由一条或多条规则组成的集合。所谓规则&#xff0c;是 描述报文匹配条件的判断语句&#xff0c;这些条件可以是报文的源地址、目的地址、端口号等。 ACL本质上是一种报文过滤器&#xff0c;规则是过…

编写一个程序,提示用户输入大写字母,如果输入的不是大写字母,提示用户输入大写字母;如果是大写字母,使用嵌套循环以下面金字塔型的格式打印字母

代码如下: #include<stdio.h> int main(void) { char ch; int i,j; printf("请输入一个大写字母:"); scanf("%c", &ch); i ch - A 1; for (j 1; j < i; j) { //空格的循环 int space; for(spacei-j1; space >1; space--) { pr…

机器学习---随机森林

1、使用决策树来做回归或者预测值 如上图&#xff0c;使用学历、收入、身高、行业使用决策树来预测收到的邮件数。可以将邮件数分为几类&#xff08;也可以按照其他列&#xff0c;将邮件数分类&#xff09;&#xff0c;比如邮件数<23封属于A类&#xff0c;邮件数大于23<邮…

Linux/Windows IP | Team基础管理

引言 IP&#xff08;Internet Protocol&#xff09; 定义&#xff1a; IP&#xff08;Internet Protocol&#xff09;是网络传输数据的协议&#xff0c;负责在网络中唯一标识和定位设备&#xff0c;并提供数据传输的基础。功能&#xff1a; 允许计算机在网络上相互通信和交换…

pycharm下执行conda命令提示无法识别解决方案

1 问题描述 win10环境命令行执行conda命令&#xff0c;报命令无法识别&#xff0c;错误信息如下&#xff1a; PS D:\code\cv> conda activate pt conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&a…

算法专题三:二分算法

二分法 零.二分查找1.思路一&#xff1a;朴素二分 一.在排序数组中第一个和最后一个数&#xff1a;1.思路一&#xff1a;GIF题目解析 二.算法X的平方根&#xff1a;1.思路一&#xff1a;暴力哈希2.思路二&#xff1a;二分区间GIF题目解析 三.搜索插入位置&#xff1a;1.思路一&…

Centos 8.5 Oracle12c安装

由于多次安装踩坑&#xff0c;所以本次写了一份12c安装的完整版。可以直接使用。 一、安装数据库基本信息 名称 值 主机名 database 操作系统 CentOS Linux release 8.5.2111 Oracle用户名/密码 oracle Oracle 版本 12c Enterprise Edition Release 12.2.0.1.0 oracle…

Android开发——activity类中的回调方法中的7个生存期

1、onCreate() 这个方法在每个活动中都能进行重写&#xff0c;他会活动在第一次被创建的时候调用。在这个方法中完成活动的初始化操作&#xff0c;如&#xff1a;加载布局、绑定事件等 2、onStart() 这个方法在活动由不可见变为可见的时候调用 3、onResume() 这个方法在活动中准…

扭蛋机小程序搭建,“互联网+”下的发展优势

随着我国生活水平和消费能力不断提高&#xff0c;人们对各种潮流文化类的产品需求也快速上升。至此&#xff0c;我国潮流文化市场得到了快速发展&#xff01; 扭蛋机作为潮玩中的一种商业模式&#xff0c;深受不同年龄层用户的喜爱。并且扭蛋机的种类也是各式各样&#xff0c;…

大数据可视化BI分析工具Apache Superset结合内网穿透实现远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

Pooling方法总结(语音识别)

Pooling layer将变长的frame-level features转换为一个定长的向量。 1. Statistics Pooling 链接&#xff1a;http://danielpovey.com/files/2017_interspeech_embeddings.pdf The default pooling method for x-vector is statistics pooling. The statistics pooling laye…