Spring MVC 参数接收

参数接收

Springmvc中,接收页面提交的数据是通过方法形参来接收:

  • 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参

  • springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据

基本数据类型

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​@RequestMapping("/findAccount5")public String findAccount5(String username,Model model){model.addAttribute("msg", username);return "success";}@RequestMapping("/findAccount6")public String findAccount6(String username,Integer age,Model model){model.addAttribute("msg", username+" "+age);return "success";}
    }
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount5?username=eric">参数接收-基本数据类型</a>
    <a href="/account/findAccount6?username=eric&age=22">参数接收-多个基本数据类型</a>

POJO类型参数绑定

  • 编写pojo

    public class Account implements Serializable {private Integer id;private String name;private Float money;private Address address;//省略get set toString方法}
    public class Address implements Serializable {private String provinceName;private String cityName;//省略get set toString方法}
  • 编写controller

    package com.by.controller;
    ​
    import com.by.pojo.Account;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    ​
    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​@RequestMapping("/saveAccount")public String saveAccount(Account account, Model model){model.addAttribute("msg", account);return "success";}
    }

  • 在index.jsp里面添加表单

    <form action="account/saveAccount" method="post">账户名称:<input type="text" name="name"><br/>账户金额:<input type="text" name="money"><br/>账户省份:<input type="text" name="address.provinceName"><br/>账户城市:<input type="text" name="address.cityName"><br/><input type="submit" value="保存">
    </form>

restful风格

  • restful概述:

(Representational State Transfer,表现层状态转移):URL定位资源时,用HTTP动词(GET,POST,DELETE,PUT)描述操作

restful风格URL

  • 在Restful之前的操作: http://127.0.0.1/user/query?id=1 根据用户id查询用户数据 http://127.0.0.1/user/save 新增用户 http://127.0.0.1/user/update?id=1 修改用户信息 http://127.0.0.1/user/delete?id=1 删除用户信息

  • RESTful用法: http://127.0.0.1/user/1 GET 根据用户id查询用户数据 http://127.0.0.1/user POST 新增用户 http://127.0.0.1/user PUT 修改用户信息 http://127.0.0.1/user/1 DELETE 删除用户信息

  • RESTful总结:

    Restful风格就是请求url统一,根据不同的请求方式,请求不同的后台方法。如果需要携带参数,在url上使用/{}占位符。

@PathVaribale

  • 作用

    用于绑定url中的占位符。例如:/account/{id},这个{id}就是url占位符

    url支持占位符是spring3.0之后加入的,是springmvc支持rest风格url的重要标志。

  • 描述需要使用指定的请求方式来请求该方法

    @Controller
    @RequestMapping("/account")
    public class AccountController {@RequestMapping(value="/findAccount7/{id}")public String findAccount11(@PathVariable Integer id, Model model){model.addAttribute("msg", id);return "success";}
    }
  • 测试:在index.jsp里面定义超链接

    <a href="/account/findAccount7/123">restful传参</a><br>

请求参数乱码问题

POST请求方式解决乱码问题

  • 在web.xml里面设置编码过滤器

    <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>
  • 测试

GET请求方式解决乱码问题

  • tomcat对GET和POST请求处理方式是不同的,GET请求的编码问题,要改tomcat的 配置信息,如下:

    <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path><!--按UTF-8进行编码--><uriEncoding>UTF-8</uriEncoding></configuration>
    </plugin>

自定义类型转换器

使用场景

  • 在index.jsp里面添加日期类型

        <form action="account/saveAccount" method="post">账户名称:<input type="text" name="name"><br/>账户金额:<input type="text" name="money"><br/>账户省份:<input type="text" name="address.provinceName"><br/>账户城市:<input type="text" name="address.cityName"><br/>开户日期:<input type="text" name="date"><br/><input type="submit" value="保存"></form>
  • 在pojo里面添加日期类型

    public class Account implements Serializable {private Integer id;private String name;private Float money;private Address address;//添加日期类型private Date date;//省略get set toString方法
    }    
  • 测试

  • 原因

    我们前台传递的是字符串类型的参数,但是后台使用的是Date类型接收的。我们期望springmvc可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。

自定义类型转换器

  1. Converter接口说明:

  2. 定义一个类,实现Converter接口

    public class DateConverter implements Converter<String, Date> {@Overridepublic Date convert(String source) {try {DateFormat format = new SimpleDateFormat("yyyy-MM-dd");return format.parse(source);} catch (Exception e) {e.printStackTrace();}return null;}
    }
  3. 在 springmvc.xml配置文件中配置类型转换器

        <!--开启springmvc注解支持--><mvc:annotation-driven conversion-service="cs"></mvc:annotation-driven><!-- 配置类型转换器工厂 --><bean id="cs"class="org.springframework.context.support.ConversionServiceFactoryBean"><!-- 给工厂注入一个新的类型转换器 --><property name="converters"><set><!-- 配置自定义类型转换器 --><bean class="com.by.converter.DateConverter"></bean></set></property></bean>

使用ServletAPI接收参数

  • 编写controller

    @Controller
    @RequestMapping("/account")
    public class AccountController {
    ​@RequestMapping("/findAccount8")public String findAccount8(HttpServletRequest request, HttpServletResponse response){String username = request.getParameter("name");String age = request.getParameter("age");request.setAttribute("msg",username+" "+age);return "success";}
    }
  • 在index.jsp里面定义超链接

    <a href="/account/findAccount8?username=eric&age=19">Servlet接收参数</a>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LightGBM原理和调参

背景知识 LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架&#xff0c;具有支持高效率的并行训练、更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以处理海量数据等优点。 普通的GBDT算法不支持用mini-batch的方式训练&#xff0c;在每一次…

Google Pixel 与 iPhone手机:哪个更好?

iPhone稳定可靠&#xff0c;Pixel性价比高且创新。两者各有千秋&#xff0c;满足不同需求 谷歌的 Pixel 手机是 Android 最接近 iPhone 的手机&#xff0c;也是真正原生的Android手机。在iPhone 15 Pro Max 与华为 Mate 60 Pro的比较中不难看出&#xff0c;iPhone依然有着极强…

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程 异步点餐的优点&#xff1a;能同时服务多个客人 异步点餐一定会提升单个客户点餐速度吗&#xff1f; 答案理所当然&#xff1a;不能 图片美化服务例子服务器能够同时服务的请求数量有限 void BeautifyPic (File photo, Response response) {byte[] …

Nginx配置反向代理实例二

Mac 安装Nginx教程 Nginx配置反向代理实例一 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 反向代理实例二实现的效果 使用nginx 反向代理&#xff0c;根据访问的地址跳转到不同端口的服务中 nginx 监听端口为81&#xff1b; 访问地址1&#xff1a;http:/…

postman使用-06断言

文章目录 一、断言定义二、 常用的断言三、断言-状态码&#xff08;1&#xff09;单一状态码断言&#xff1a;Status code:Code is 200 检查返回的状态码是否为200原始模板&#xff1a;修改后&#xff1a;括号里的200也可以改成自己要断言的状态码具体步骤&#xff1a;断言成功…

字体图标 iconFont

字体图标使用场景︰主要用于显示网页中通用、常用的一些小图标 精灵图是有诸多优点的&#xff0c;但是缺点很明显。 图片文件还是比较大的。图片本身放大和缩小会失真。一旦图片制作完毕想要更换非常复杂。 此时&#xff0c;有一种技术的出现很好的解决了以上问题&#xff0c…

springboot虹软人脸识别集成

准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…

力扣日记1.10-【二叉树篇】701. 二叉搜索树中的插入操作

力扣日记&#xff1a;【二叉树篇】701. 二叉搜索树中的插入操作 日期&#xff1a;2024. 参考&#xff1a;代码随想录、力扣 —————————————————————— 天哪&#xff0c;上次打开力扣还是2023&#xff0c;转眼已经2024&#xff1f;&#xff01; 两个星期过去…

【提示学习论文六】MaPLe: Multi-modal Prompt Learning论文原理

文章目录 MaPLe: Multi-modal Prompt Learning 多模式提示学习文章介绍动机MaPLe:Multi-modal Prompt Learning 模型结构1、Deep Language Prompting 深度语言提示2、Deep Vision Prompting 深度视觉提示3、Vision Language Prompt Coupling 视觉语言提示耦合提示耦合过程 实验…

232Modbus转Profinet应用案例分享

现场需求&#xff1a;现场需要将多台伺服接到控制器&#xff08;1200PLC&#xff09;上&#xff0c;用Modbus协议。 根据现场的描述&#xff0c;我们给出一个方案&#xff0c;在PLC和伺服中间加入232Modbus转Profinet&#xff08;XD-PNR200&#xff09;网关&#xff0c;232Modb…

如何进行大数据系统测试

大数据系统常见的架构形式有如下几种&#xff1a; Hadoop架构&#xff1a; Hadoop Distributed File System (HDFS)&#xff1a;这是一种分布式文件系统&#xff0c;设计用于存储海量数据并允许跨多台机器进行高效访问。 MapReduce&#xff1a;作为Hadoop的核心计算框架&#…

基于css实现动画效果

介绍 本文将会基于css&#xff0c;实现各种动画效果&#xff0c;接下来会从简单几个例子入手。 案例 三颗球 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><title>React App</title><style>…

【scala】编译build报错 “xxx is not an enclosing class“

private[sources] val creationTimeMs: Long {val session SparkSession.getActiveSession.orElse(SparkSession.getDefaultSession)require(session.isDefined)private[xxx]是访问权限控制在xxxx包的意思。 解决办法&#xff1a; 把[sources]删掉&#xff0c;或者改成和包名…

vim升级和配置

vim升级和配置 1、背景2、环境说明3、操作3.1 升级VIM3.2 配置VIM3.2.1、编辑vimrc文件3.2.2、安装插件 1、背景 日常工作跟linux系统打交道比较多&#xff0c;目前主要用到的是Cenots7和Ubuntu18这两个版本的linux系统&#xff0c;其中Centos7主要是服务器端&#xff0c;Ubun…

VMware正被博通“收拾”,我们是不是可以“嚣张”一点?

引言&#xff1a;一朝躺在大佬怀&#xff0c;今生荣华伸手来。 【全球存储观察 &#xff5c; 科技热点关注】 如是所闻&#xff0c;2023年元旦前两个月&#xff0c;大家看到博通以610亿美元的高价&#xff0c;成功完成收购了闻名遐迩的虚拟化大佬VMware。日期为2023年11月22日。…

0111qt

实现闹钟&#xff0c;并播报懒虫...~ daytest.pro: QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (th…

1.11.。。。

1 有道云笔记 2 .h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> #include <QTime> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QW…

江科大STM32

参考&#xff1a; https://blog.csdn.net/weixin_54742551/article/details/132409170?spm1001.2014.3001.5502 https://blog.csdn.net/Johnor/article/details/128539267?spm1001.2014.3001.5502 SPI&#xff1a;https://blog.csdn.net/weixin_62127790/article/details/132…

【SAP-PP】生产订单导入问题--完成日期向前推了一天

问题描述&#xff1a; 在执行BAPI_PRODORD_CREATE生产订单导入的时候&#xff0c;发现填写入模板中的基本完成日期是12月31日&#xff0c;但是到具体工单时变成了12月30日 截图说明&#xff1a; 感觉很神奇&#xff0c;咋一看&#xff0c;真的是日期提前了一天&#xff0c;de…

CMake入门教程【高级篇】qmake转cmake

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 概述2.qmake与cmake的差异3. qmake示例4.qmake转cmake示例5.MOC、UIC和RCC…