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.hqwc.cn/news/339261.html

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

相关文章

光鉴科技的反卷思维,让科技不再难做

文 | 智能相对论 作者 | 陈壹 中国企业的全球竞争力&#xff0c;正从“拼人力、拼产能”转为“拼技术、拼创新”的新阶段。据世界知识产权组织发布的《世界知识产权指标报告》显示&#xff0c;2022年中国专利申请量约160万件&#xff0c;排名世界第一。而在最近发布的全球百强…

MySQL:索引失效场景总结

1 执行计划查索引 通过执行计划命令可以查看查询语句使用了什么索引。 EXPLAIN SELECT * FROM ods_finebi_area WHERE areaName = 福建 执行查询计划后,key列的值就是被使用的索引的名称,若key列没有值表示查询未使用索引。 2 在什么列上创建索引 (1)列经常被用于where…

网络安全B模块(笔记详解)- nmap扫描渗透测试

nmap扫描渗透测试 1.通过BT5对服务器场景Linux进行TCP同步扫描 (使用工具Nmap,使用参数n,使用必须要使用的参数),并将该操作使用命令中必须要使用的参数作为Flag提交; Flag:sS 2.通过BT5对服务器场景Linux进行TCP同步扫描 (使用工具Nmap,使用参数n,使用必须要使用的参数…

三大热门婴儿洗衣机测评报告:综合对比希亦/觉飞/鲸立

随着家中新生命的降临&#xff0c;一大批婴儿专用的物品也陆续进入到家中&#xff0c;虽然有很多东西确实能在育儿之路上提供很多帮助&#xff0c;不过也有一些东西“很坑”。婴儿洗衣机这一产品是专为有婴幼儿的家庭或者有特殊需求的人士所研发的&#xff0c;它的容量以及体积…

VMware Visio OmniGraffle模板和图标

VMware Visio OmniGraffle模板和图标 包含可用于Visio、omnigraffle的图标和SVG矢量图。 简介 这组资源适用于 IT 管理员、系统架构师、网络工程师和其他需要可视化 VMware 基础架构的专业人士创建精确的 VMware 网络和数据中心部署图&#xff0c;通过使用这些模板和图标&am…

GB28181/GB35114平台LiveGBS何如添加白名单,使指定海康、大华、华为等GB28181摄像头或录像机设备可以免密接入

1、什么是GB/T28181级联 协议定义中的解释如下&#xff1a; 级联 cascadednetworking 两个信令安全路由网关之间按照上下级关系连接,上级中心信令控制服务器通过信令安全路由网 关可调用下级中心信令控制服务器所管辖的监控资源,下级中心信令控制服务器通过信令安全路由网 关向…

【软件测试作业_TPshop商城】农业工程学院-测试需求分析与测试计划+自动化+性能+测试用例+报告软件缺陷+测试计划+单元测试+系统测试

1测试需求分析与测试计划 1.1 被测系统简介 1.2测试需求分析 1.2.1单元测试层面的测试需求分析 1.2.2系统测试层面的测试需求分析 1.3测试计划 1.31测试范围与任务 1.3.2 测试环境 1.3.3测试进度安排 测试用例的设计2 2.1单元测试层面的测试用例设计 2.2系统测试层面的测试用例…

SpiderFlow爬虫平台 前台RCE漏洞复现(CVE-2024-0195)

0x01 产品简介 SpiderFlow是新一代爬虫平台,以图形化方式定义爬虫流程,以流程图的方式定义爬虫,不写代码即可完成爬虫,是一个高度灵活可配置的爬虫平台。 0x02 漏洞概述 SpiderFlow爬虫平台src/main/java/org/spiderflow/controller/FunctionController.java文件的Functi…

Dokerfile

阅读目录 什么是dockerfile?Dockerfile的基本结构Dockerfile文件说明 什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 docker build命令用于从Dockerfile构建映…

固定翼仿真的切换

delta固定翼飞行器模型 接着这篇文章文章链接&#xff0c;我们对飞行器模型进行改进&#xff0c; 我们知道&#xff0c;我们打开仿真模型 gazebo --verbose zephyr_ardupilot_demo.world 我们注意这最后一个语句 <model name"zephyr_delta_wing_demo">//加载z…

【目标跟踪】多相机多目标跟踪

文章目录 前言一、计算思路二、代码三、结果 前言 单相机目标跟踪之前博客已经有过基本介绍&#xff0c;本篇博客主要介绍一种多相机目标跟踪的计算方法已知各相机内外参&#xff0c;如何计算共视区域像素投影&#xff1f;废话不多说&#xff0c;见下图。 同一时刻相机A与相机…

AtCoder ABC194

这期比193稍微简单一点 C - Squared Error 手玩一下&#xff1a; N 3 N3 N3时 展开得 a 2 b 2 − 2 a b b 2 − c 2 − 2 b c a 2 c 2 − 2 a c a^2b^2-2abb^2-c^2-2bca^2c^2-2ac a2b2−2abb2−c2−2bca2c2−2ac 每个数平方项都要计算 n − 1 n-1 n−1次 减的那一份可…