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日
    浏览(39)
  • 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日
    浏览(50)
  • Spring MVC学习之——如何接收请求传过来的参数

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

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

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

    2024年02月12日
    浏览(37)
  • 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日
    浏览(50)
  • Java 新手如何使用Spring MVC 中的查询字符串和查询参数

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

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

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

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

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

    2024年02月07日
    浏览(40)
  • Spring MVC: 请求参数的获取

    在 Spring MVC 介绍中,谈到前端控制器 DispatcherServlet 接收客户端请求,依据处理器映射 HandlerMapping 配置调用相应的处理器 Controller 。那么,处理器 Controller 具体是如何实现获取请求参数的呢?

    2024年02月10日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包