Spring MVC参数接收、参数传递

这篇具有很好参考价值的文章主要介绍了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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

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;


    @Override
    public 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方法


    @Override
    public 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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

Spring MVC参数接收、参数传递,spring,mvc,java

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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

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>

 测试

Spring MVC参数接收、参数传递,spring,mvc,java

Spring MVC参数接收、参数传递,spring,mvc,java

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方法
} 

测试

Spring MVC参数接收、参数传递,spring,mvc,java

Spring MVC参数接收、参数传递,spring,mvc,java

  • 原因

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

5.2自定义类型转换器

 Converter接口说明:

Spring MVC参数接收、参数传递,spring,mvc,java 

定义一个类,实现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> {
    @Override
    public 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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

 

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>

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

7.2Model传递

 编写controller

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

 在index.jsp里面定义超链接

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

结果:

Spring MVC参数接收、参数传递,spring,mvc,java

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>

结果

Spring MVC参数接收、参数传递,spring,mvc,java

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");文章来源地址https://www.toymoban.com/news/detail-795379.html

到了这里,关于Spring MVC参数接收、参数传递的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring MVC学习】连接 && 接收请求参数 && 响应返回参数

    目录 前言:认识Spring MVC 🌷1、什么是MVC? 一、建立连接(5个注解) 🌷1、@RequestMapping注解:注册接⼝的路由映射(默认返回页面) 🌷2、@ResponseBody注解:表示返回的是数据 🌷 3、组合注解@RestController = @ResponseBody + @Controller 🌷4、支持Get请求的2种写法@GetMapping + @RequestMapp

    2024年02月16日
    浏览(41)
  • Spring MVC 参数传递和JSON数据处理

    编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接 springmvc 默认使用jackson作为json类库,不需要修改applicationContext-servlet.xml任何配置,只需引入以下类库springmvc就可以处理json数据: @RequestBody:作用是接收前端aja

    2024年01月24日
    浏览(51)
  • Spring MVC学习之——如何接收请求传过来的参数

    Springmvc中,接收页面提交的数据是通过方法形参来接收: 处理器适配器调用springmvc使用反射将前端提交的参数传递给controller方法的形参 springmvc接收的参数都是String类型,所以spirngmvc提供了很多converter(转换器)在特殊情况下需要自定义converter,如对日期数据 直接接收即可

    2024年01月20日
    浏览(46)
  • 五、Spring MVC 接收请求参数以及数据回显、乱码问题

    客户端或者前端通过 URL 请求传递过来的参数,在控制器中如何接收? 1、当参数和 Controller 中的方法参数一致时,无需做处理,可以正常接收 代码示例以及对应 URL http://localhost:8080/user?name=sys 测试结果 2、当参数和 Controller 中的方法参数不一致时,需要通过 @RequestParam 控制

    2024年02月12日
    浏览(38)
  • Spring MVC入门必读:注解、参数传递、返回值和页面跳转的关键步骤

    目录 引言 一、常用注解 1.1.@RequestMapping 1.2.@RequestParam 1.3.@RequestBody 1.4.@RequestHeader 1.5.@PathVariable 二、参数传递 2.1.基础类型+String 2.2.复杂类型 2.3.@RequestParam 2.4.@PathVariable 2.5.@RequestBody 2.6.@RequestHeader 三、返回值 3.1.void 3.2.String 3.3.String+Model 3.4.ModelAndView 四、页面跳转 4.1.转发forw

    2024年02月09日
    浏览(35)
  • Spring-mvc的参数传递与常用注解的解答及页面的跳转方式---综合案例

    目录 一.slf4j--日志 二.常用注解        2.1.@RequestMapping       2.2.@RequestParam       2.3.@RequestBody       2.4.@PathVariable 三.参数的传递 3.1 基础类型 3.2 复杂类型 3.3 @RequestParam 3.4  @PathVariable 3.5 @RequestBody 3.6 增删改查  四.返回值            4.1 void 返回值   4.2 String

    2024年02月09日
    浏览(51)
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数

    目录 前言   什么是查询字符串和查询参数? Spring MVC中的查询参数  处理可选参数 处理多个值 处理查询参数的默认值 处理查询字符串 示例:创建一个RESTful服务  总结 作者简介:  懒大王敲代码,计算机专业应届生 今天给大家聊聊Java 新手如何使用Spring MVC 中的查询字符串

    2024年02月03日
    浏览(49)
  • Spring MVC学习之——数据传递(在页面上添加数据)

    编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接 编写controller 在index.jsp里面定义超链接

    2024年01月18日
    浏览(46)
  • Spring MVC 请求参数绑定

    Spring MVC 是一个用于构建 Web 应用程序的框架,它提供了一种方便的方式来处理 HTTP 请求和响应。在 Spring MVC 中,请求参数绑定是将 HTTP 请求中的参数映射到控制器方法的参数上的过程。Spring MVC 提供了多种方式来实现请求参数绑定。 请求参数绑定:说⽩了SpringMVC如何接收请求

    2024年02月07日
    浏览(42)
  • Spring MVC各种参数进行封装

    目录 一、简单数据类型 1.1 控制器方法 1.2 测试结果 二、对象类型 2.1 单个对象 2.1.1 控制器方法 2.1.2 测试结果 2.2 关联对象 2.2.1 控制器方法 2.2.2 测试结果 三、集合类型 3.1 简单数据类型集合 3.1.1 控制方法 3.1.2 测试结果 3.2 对象数据类型集合 3.2.1 控制器方法 3.2.2 测试结

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包