Spring MVC参数接收、参数传递

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

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

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

1.基本数据类型

编写controller

  @RequestMapping("/controller3")public String controller3(String name,Model model){model.addAttribute("msg",name);return "success";}

 在index.jsp里面定义超链接

<a href="/Account/controller3?name=Tom">接收参数—基本数据类型</a><br>

结果:

2.POJO类型参数绑定

编写pojo

package com.by.pojo;import java.io.Serializable;
import java.util.Date;public class Account implements Serializable {private Integer id;private String name;private Float money;private Address address;private Date date;@Overridepublic String toString() {return "Account{" +"id=" + id +", name='" + name + '\'' +", money=" + money +", address=" + address +", date=" + date +'}';}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Float getMoney() {return money;}public void setMoney(Float money) {this.money = money;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}
}
package com.by.pojo;import java.io.Serializable;public class Address implements Serializable {private String provinceName;private String cityName;//省略get set toString方法@Overridepublic String toString() {return "Address{" +"provinceName='" + provinceName + '\'' +", cityName='" + cityName + '\'' +'}';}public String getProvinceName() {return provinceName;}public void setProvinceName(String provinceName) {this.provinceName = provinceName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}
}

 编写controller

 @RequestMapping("/controller9")public String controller9(Account account, Model model){model.addAttribute("msg",account);return "success";}

在index.jsp里面添加表单

 <form action="/Account/controller9" 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>

结果:

3.restful风格

  • restful概述:

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

3.1restful风格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上使用/{}占位符。

3.2@PathVaribale

  • 作用

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

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

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

 @RequestMapping("/controller10/{id}")public String controller10(@PathVariable("id") Integer id,Model model){model.addAttribute("msg",id);return "success";}

 测试:在index.jsp里面定义超链接

  <a href="/Account/controller10/111">restful</a><br>

结果:

4.请求参数乱码问题

4.1POST请求方式解决乱码问题

在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>

 测试

4.2GET请求方式解决乱码问题

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>

5.自定义类型转换器

5.1使用场景

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

 <form action="/Account/controller11" 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可以帮我们做数据类型的自动转换,显然没有做,所以我们需要自己自定义类型转换器。

5.2自定义类型转换器

 Converter接口说明:

 

定义一个类,实现Converter接口

package com.by.converter;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class DateConverter implements Converter<String, Date> {@Overridepublic Date convert(String str) {try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = sdf.parse(str);return date;} catch (ParseException e) {e.printStackTrace();}return null;}
}

 在 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>

结果:

6.使用ServletAPI接收参数

 编写controller

  @RequestMapping("/controller12")public String controller12(HttpServletRequest request){String name = request.getParameter("name");Float money = Float.valueOf(request.getParameter("money"));request.setAttribute("msg",name+"===="+money);return "success";}

 在index.jsp里面定义超链接

<a href="/Account/controller12?name=Tom&money=999">servlet接收参数</a><br>

结果:

 

7.参数传递

7.1ModelAndView传递

编写controller

  @RequestMapping("/controller13")//也可以不创建ModelAndView,直接在参数中指定public ModelAndView controller13(ModelAndView mv){mv.addObject("msg","李寒衣");mv.setViewName("success");return mv;}

 在index.jsp里面定义超链接

<a href="/Account/controller13">ModelAndView参数传递</a><br>

结果:

7.2Model传递

 编写controller

 @RequestMapping("/controller14")public String controller10(Model model){model.addAttribute("msg","天女蕊");return "success";}

 在index.jsp里面定义超链接

<a href="/Account/controller14">Model参数传递</a><br>

结果:

7.3ServletAPI传递

 编写controller

  @RequestMapping("/controller15")public String controller15(HttpServletRequest request){request.setAttribute("msg","唐莲");return "success";}

  在index.jsp里面定义超链接

  <a href="/Account/controller15">Servlet API 参数传递</a><br>

结果

8.总结:

接收参数
    1、基本类型(少量)
        <a href="/account/findAccount7?name=tom">

        public String findAccount7(String name, Model model){
        }
    2、pojo(多个)
        <a href="/account/findAccount8?name=tom&id=18">

        public String findAccount8(Account account, Model model){
        }
    3、restful
        <a href="/account/findAccount10/123">

        @RequestMapping("/findAccount10/{id}")
        public String findAccount10(@PathVariable Integer id){

        }
    4、日期类型转换器
        public class DateConverter implements Converter<String, Date> {
        }

        <!--注册转换器工厂-->
        <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>

    3、中文乱码
        1)post方式
            <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)get方式
            new String(name.getBytes(),"UTF-8");

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

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

相关文章

Contingency Planning学习记录

Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles Contingency Planning over Probabilistic Hybrid Obstacle Predictions for Autonomous Road Vehicles - 知乎 Contingency Planning over Probabilistic Hybrid Obstac…

QT第二天

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为&…

赠送葡萄酒:为别人选择合适的葡萄酒

葡萄酒可以在许多不同的场合成为很好的礼物&#xff0c;因为它可以用来庆祝许多不同的事情。当被邀请去别人家时&#xff0c;你可以带酒去吃饭。葡萄酒可以用来纪念婚礼、出生、毕业和各种纪念日&#xff0c;来自云仓酒庄品牌雷盛红酒分享这是一个非常合适的专业礼物。但是你怎…

1878_emacs company backend的选择尝试

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/editors_skills: Summary for some common editor skills I used. 1872_emacs company backend的选择尝试 从C语言开发的使用场景角度&#xff0c;通过测试尝试看看这个company的backend应该来如何配置。 主题由来介…

React Native 桥接原生实现 JS 调用原生方法

一、为什么需要桥接原生 为了满足在React 层无法实现的需求 复杂高性能的组件&#xff1a;复杂表格、视频播放原生层开发能力&#xff1a;传感器编程、widget平台属性&#xff1a;系统信息、设备信息对接第三方应用&#xff1a;相机、相册、地图 真实的开发过程中是不可能完…

Spring循环引用和三级缓存

前言 Spring 解决 Bean 之间的循环引用关系用到了三级缓存&#xff0c;那么问题来了。三级缓存是怎么用的&#xff1f;每一层的作用是什么&#xff1f;非得用三级吗&#xff1f;两级缓存行不行&#xff1f; 理解循环引用 所谓的“循环引用”是指 Bean 之间的依赖关系形成了一…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷④

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷4 目录 需要竞赛软件包环境以及备赛资源可私信博主&#xff01;&#xff01;&#xff01; 2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷4 模块一 …

一键搭建elk

一键启动elk 1. 生成环境的脚本 setup.sh #!/usr/bin/bash# logstash enviroment mkdir -p logstash touch logstash/logstash.conf # shellcheck disableSC1078 echo input {tcp {mode > "server"host > "0.0.0.0"port > 4560codec > jso…

多PC文件夹同步方案

在多个工作终端独立具备svn版本库的情况下&#xff0c;可使用本工具进行一键同步。 相较于传统的SVN中心检出更新方案中移动存储设备硬件及文件目录系统多终端间易损坏&#xff0c;本方案更加稳定 资料同步结构&#xff1a; 使用步骤&#xff1a; 1.修改config.ini配置文件 2…

【C++】HP-Socket(二):框架介绍、功能说明

1、接口 1.1 接口模型 1.2 三类接口 HP-Socket 定义了三类接口 组件接口&#xff08;如&#xff1a;ITcpServer / IUdpClient&#xff09;&#xff1a;声明组件操作方法&#xff0c;应用程序创建组件对象后通过该接口来使用组件组件实现类&#xff08;如&#xff1a;CTcpSer…

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令&#xff1a;brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式&#xff1a;在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…

powerdesigner导出sql将name放到comment注释上

1. 批量设置 2. 脚本 Option Explicit ValidationMode True InteractiveMode im_Batch Dim mdl the current modelget the current active model Set mdl ActiveModel If (mdl Is Nothing) ThenMsgBox"There is no current Model " ElseIf Not mdl.IsKindOf(PdPD…

JSON数据处理

1.添加json依赖 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置&#xff0c;只需引入以下类库springmvc就可以处理json数据&#xff1a; <!--spring-json依赖--> <dependency><groupId>com.fasterxml.jackson.c…

构建自己的私人GPT-支持中文

上一篇已经讲解了如何构建自己的私人GPT&#xff0c;这一篇主要讲如何让GPT支持中文。 privateGPT 本地部署目前只支持基于llama.cpp 的 gguf格式模型&#xff0c;GGUF 是 llama.cpp 团队于 2023 年 8 月 21 日推出的一种新格式。它是 GGML 的替代品&#xff0c;llama.cpp 不再…

【cmu15445c++入门】(2)c++中的std::move() 左值引用右值引用

左值右值 要理解move语义&#xff0c;必须理解左值和右值的概念。左值的简化定义是左值是对象&#xff0c;指向内存中某个位置。右值是左值之外的任何。 std::move() move语义&#xff0c;在C中是一个有用的方法&#xff0c;它允许在对象之间高效和优化地转移数据所有权。m…

SpringMVC SpringMVC概述

1.1.MVC介绍 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#xff1a;专门存储业务数…

vue3 useAttrs的使用场景,提取共有props

1 场景 多个类似组件都需要传参data&#xff0c;用于请求接口或者处理数据&#xff0c;想让组件干净整洁&#xff0c;把参数data提出来 2 方法 选项式 可以使用mixin混入或者extends继承&#xff08;略&#xff09; 组合式 可以使用hook 无脑式踩坑&#xff08;如下代码…

LabVIEW在设备状态监测与故障诊断中的应用

在现代工业自动化领域&#xff0c;LabVIEW的系统设计平台在设备状态监测与故障诊断中扮演着举足轻重的角色。通过提供一个可视化和数据流编程语言&#xff0c;LabVIEW大大提升了设备安全监测的效率&#xff0c;减少了系统维护成本&#xff0c;同时增强了设备的可靠性和可维护性…

Verilog 高级教程笔记——持续更新中

Verilog advanced tutorial 转换函数 调用系统任务任务描述int_val $rtoi( real_val ) ;实数 real_val 转换为整数 int_val 例如 3.14 -> 3real_val $itor( int_val ) ;整数 int_vla 转换为实数 real_val 例如 3 -> 3.0vec_val $realtobits( real_val ) ;实数转换为…

Yolov5水果分类识别+pyqt交互式界面(附代码)

本文介绍了基于Yolov5模型的水果分类识别系统以及使用PyQt库构建的交互式界面。 首先&#xff0c;Yolov5是一种目标检测算法&#xff0c;它可以通过输入图片&#xff0c;自动识别出其中包含的不同目标&#xff0c;并标注出它们的位置和类别。我们利用Yolov5模型对水果图片进行…