SpringMVC的请求(参数绑定注解、Restful风格的参数的获取、自定义类型转换器、获得Servlet相关API)

2023-11-18

SpringMVC的请求-获得请求参数

1-SpringMVC的请求-获得请求参数-配置全局乱码过滤器

<form action="${pageContext.request.contextPath}/user/quick14" method="post">
    <%--表明是第一个User对象的username age--%>
    username:<input type="text" name="userList[0].username"><br/>
    age:<input type="text" name="userList[0].age"><br/>
    <input type="submit"value="提交">
</form>

在这里插入图片描述

  • 当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。
  • web.xml文件里面进行以下配置。
<!--配置全局过滤的filter-->
<filter>
    <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern><!--对所有的资源都进行过滤-->
</filter-mapping>

2-SpringMVC的请求-获得请求参数-参数绑定注解@RequestParam

在这里插入图片描述

  • 当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定
<form action="${pageContext.request.contextPath}/quick16" method="post">
    <input type="text" name="name"><br>
    <input type="submit" value="提交"><br>
</form>
  • 注解@RequestParam还有如下参数可以使用:
    ①、value与请求参数名称
    在这里插入图片描述
  • ②、required此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错。
    在这里插入图片描述
  • ③、defaultValue当没有指定请求参数时,则使用指定的默认值赋值
    在这里插入图片描述
@RequestMapping(value="/quick16")
@ResponseBody
public void save16(@RequestParam(value="name",required = false,defaultValue = "itcast") String username) throws IOException {
    System.out.println(username);
}

3-SpringMVC的请求-获得请求参数-Restful风格的参数的获取

  • Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
  • Restful风格的请求是使用“url+请求方式”表示一次请求目的的,HTTP 协议里面四个表示操作方式的动词如下:
    ①、GET:用于获取资源
    ②、POST:用于新建资源
    ③、PUT:用于更新资源
    ④、DELETE:用于删除资源
  • 例如:
    ①、/user/1 GET : 得到 id = 1 的 user
    ②、/user/1 DELETE: 删除 id = 1 的 user
    ③、/user/1 PUT: 更新 id = 1 的 user
    ④、/user POST: 新增 user
  • 上述url地址/user/1中的1就是要获得的请求参数,在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id}占位符{id}对应的就是1的值。在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
  • http://localhost:8080/itheima_springmvc1/quick17/zhangsan
    在这里插入图片描述
@RequestMapping(value="/quick17/{name}")
@ResponseBody
 public void save17(@PathVariable(value="name") String username) throws IOException {
        System.out.println(username);
 }

在这里插入图片描述

4-SpringMVC的请求-获得请求参数-自定义类型转换器

在这里插入图片描述

  • 对于上面出现的问题,我们可以通过自定义类型转换器来解决通过不一样的格式也可以正常的在控制台输出。
  • SpringMVC 默认已经提供了一些常用的类型转换器,例如客户端提交的字符串转换成int型进行参数设置。
  • 但是不是所有的数据类型都提供了转换器,没有提供的就需要自定义转换器,例如:日期类型的数据就需要自定义转换器。
  • 自定义类型转换器的开发步骤:
    ①、转换器类实现Converter接口,在com.itheima.converter包里面创建DateConverter类来实现Converter接口。
package com.itheima.converter;

import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*将String转换成Date,泛型中前面String是转型前的格式,后面Date是我们想要转成的格式*/
public class DateConverter implements Converter<String,Date> {
    public Date convert(String dateStr) {
        //将日期字符串转换成日期对象,返回
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
  • ②、在spring-mvc.xml配置文件中声明转换器
<!--声明转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<!--ConversionServiceFactoryBean转换器服务的工厂对象-->
    <property name="converters">
        <list>
        	<!--class为自定义的转换器权限名-->
            <bean class="com.itheima.converter.DateConverter"></bean>
        </list>
    </property>
</bean>
  • ③、在spring-mvc.xml文件中<annotation-driven>中引用转换器
<!--mvc的注解驱动-->
<mvc:annotation-driven conversion-service="conversionService"/>
@RequestMapping(value="/quick18")
@ResponseBody
public void save18(Date date) throws IOException {
    System.out.println(date);
}

5-SpringMVC的请求-获得请求参数-获得Servlet相关API

  • SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入,常用的对象如下:
  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
    在这里插入图片描述
@RequestMapping(value="/quick19")
@ResponseBody
public void save19(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
    System.out.println(request);
    System.out.println(response);
    System.out.println(session);
}

6-SpringMVC的请求-获得请求参数-获得请求头信息

  • 使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)
  • @RequestHeader注解的属性如下:
    ①、value:请求头的名称
    ②、required:是否必须携带此请求头

    在这里插入图片描述
@RequestMapping(value="/quick20")
@ResponseBody
public void save20(@RequestHeader(value = "User-Agent",required = false) String user_agent) throws IOException {
    System.out.println(user_agent);
}
  • 使用@CookieValue可以获得指定Cookie的值
  • @CookieValue注解的属性如下:
    ①、value:指定cookie的名称
    ②、required:是否必须携带此cookie

    在这里插入图片描述
 @RequestMapping(value="/quick21")
@ResponseBody
public void save21(@CookieValue(value = "JSESSIONID") String jsessionId) throws IOException {
    System.out.println(jsessionId);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringMVC的请求(参数绑定注解、Restful风格的参数的获取、自定义类型转换器、获得Servlet相关API) 的相关文章

随机推荐

  • C++之数组

    C 基础 3 数组 3 1 一维数组 3 1 1 一维数组定义方式 3 1 2 一维数组数组名 3 2 二维数组 3 2 1 二维数组定义方式 3 2 2 二维数组数组名 3 数组 3 1 一维数组 概述 数组就是一个集合 里面存放了相同类
  • 进程、线程、管程、纤程、协程概念以及区别

    进程 进程是指在操作系统中能独立运行并作为资源分配的基本单位 由一组机器指令 数据和堆栈等组成的能独立运行的活动实体 进程在运行是需要一定的资源 如CPU 存储空间和I O设备等 进程是资源分配的基本单位 进程的调度涉及到的内容比较多 存储
  • WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connec

    python安装包错误 网络原因 直接改用阿里云镜像 然后再安装 pip config set global index url https mirrors aliyun com pypi simple 这就修改成功 接下来正常执行安装命令
  • docker 编辑容器内文件

    docker 编辑容器内文件 近期在学习docker 为编辑容器中文件 可以使用以下几种方法 特此记录 方法1 在容器中修改 使用vi命令编辑文件 注 如果vi命令没有 可以使用yum y install vim或者apt get inst
  • js-table2excel

    eslint disable let idTmr const getExplorer gt let explorer window navigator userAgent ie if explorer indexOf MSIE gt 0 r
  • 流程图中的实线_XMind如何在流程图中绘制实线箭头?XMind使用技巧

    如何利用xmind制作自己的思维导图 你好 建议你可以这样试试看 打开画图工具点击上方栏目 思维导图 在跳转专的页面点击 立即属体验 进入在线绘制界面 在画布的四周有很多的工具栏 这些在绘制的过程中都是可以使用的 首先 将中心主题进行确立
  • Java中StringBuffer类常用方法介绍

    StringBuffer类的介绍 StringBuffer是字符串缓存区 当new的时候是在堆内存创建了一个对象 底层是一个长度为16的 字符数组当调用添加的方法时 不会再重新创建对象 在不断向原缓冲区添加字符 查看字符串缓存区容量和长度
  • 快速傅氏变换之旅(一) 概念简介 3

    1 蝶形变换 普通的FFT算法称为基2的FFT算法 这种算法的核心是蝶形变换 长度为n 2 k1的变换共需要做 k1 n 2 次蝶形变换 如上图所示 若需变换数据表示为一个复数数组c 则每次蝶形变换有2个输入 c i c i s 两个输出
  • JS解密日记

    前言 JS混淆是通过改变JS代码的语法结构来使代码难以阅读和理解的技术 然而 请注意 混淆并不能真正保护您的代码 因为它仍然可以被解密和恢复其原始形式 直接上源代码 eval function p a c k e r e function
  • C11:mutex和lock_guard的使用.

    在C 11中 引入了有关线程的一系列库 且都在std命名空间内 下面演示一个使用线程的例子 非常的简单 引入了thread和mutex头文件 include
  • 攻防世界 inget

    打开网页提示 Please enter ID and Try to bypass 输入id绕过 尝试一下万能钥匙 尝试要不要符号闭合 http 61 147 171 105 49280 id 1 or 1 1 加个单引号成功 http 61
  • 【菜鸟C++学习杂记】ASCII码转换和显示

    笔者今年刚考上华东某高校的计算机研究生 本科虽是计算机学院 但期间主攻C 和Unity游戏开发 研究生属于小跨到计算机科学与技术 目前在进行硕导给的假期期间学习C 的任务 此类杂记主要记录下编码过程遇到的一些有趣的小知识 在某网课遇到了一个
  • 运用PL/SQL从1~100(包含边界)偶数之和

    1 第一种 方式实现 代码 set serveroutput on declare number integer 0 i integer 0 begin while i lt 100 loop number number i i i 2 e
  • 巴比特

    摘要 据 科创板日报 报道 当地时间5月9日 Meta宣布开源了一种可以横跨6种不同模态的全新AI模型ImageBind 包括视觉 图像和视频形式 温度 红外图像 文本 音频 深度信息 运动读数 由惯性测量单元或IMU产生 ImageBin
  • 为什么需要进程间通信??

    进程是一个独立的资源分配单元 不同进程 这里所说的进程通常指的是用户进程 之间的资源是独立的 没有关联 不能在一个进程中直接访问另一个进程的资源 例如打开的文件描述符 但是 进程不是孤立的 不同的进程需要进行信息的交互和状态的传递等 因此需
  • 微信公众号支付H5调用支付详解

    原文地址 http blog csdn net fengshizty article details 45564685 微信公众号支付 最近项目需要微信支付 然后看了下微信公众号支付 虽然不难 但是细节还是需要注意的 用了大半天时间写了个d
  • [Java]JAVA获取实体与List 数组的转换

    public class BeanToArray private String beanNames private Object values public BeanToArray public BeanToArray String bea
  • vs添加第三方库详解

    vs添加第三方库详解 一 编写库所生成的文件 核心文件 二 两种使用库的方式 此时添加一个Pro工程调用这个库 三 库导出函数时候的细节情况 四 新建工程使用这个库 以前总是不知道怎么使用第三方库 每次想学习一个库进行开发 总是遇到各种各样
  • Java中关于System.out.println/print的运算规则

    一 输出到控制台 System out println msg 输出一个字符串 带换行 n System out print msg 输出一个字符串 不带换行 n System out printf format msg 格式化输出 注 p
  • SpringMVC的请求(参数绑定注解、Restful风格的参数的获取、自定义类型转换器、获得Servlet相关API)

    SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 SpringMVC的请求 获得请求参数 1 SpringMVC的请求 获得请求参数 配置全局乱码过滤器 2 SpringMVC的请求 获得请求参数 参数绑定注解