SpringMVC 请求参数绑定

1、@RequestMapping

  • 作用:用于建立请求URL和处理请求方法之间的对应关系。
    当该注解放在类上的时候就表示的是一级访问目录。
    当该方法放在方法上的时候就表示是二级访问目录。
  • 属性:
    value:用于指定请求的URL。它和path属性的作用是一样的。
    method:用于指定请求的方式。
    @RequestMapping(path = “/hello”,method = {RequestMethod.POST})
  • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一摸一样。
    @RequestMapping(path = “/hello”,method = {RequestMethod.POST},params = {“username”})
    <a href=“user/hello?username=111”>asdasd</a>
  • headers:发送的请求中必须包含请求头
    @RequestMapping(path = “hello”,headers = {“Accept”})

2、请求参数的绑定

public String sayHellow()直接在括号里加参数名称

  1. 请求参数的绑定说明
    • 绑定机制
      • 表单提交的数据都是k=v格式的,username=111&&password=222
      • SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
      • 要求:提交提交表单的name和参数的名称是相同的
    • 支持的数据类型
      • 基本数据类型和字符串类型
      • 实体类型(JavaBean)
      • 集合数据类型(List,map集合等)
  2. 基本数据类型和字符串类型
    • 提交表单的name和参数的名称是相同的
    • 区分大小写
  3. 实体类型(JavaBean)
    • 提交表单的name和javaBean中的属性名称一样。
    • 如果一个JavaBean类中包含其他引用类型,那么表单的name属性需要编写成;对象.属性,例如:address.name
  4. 给集合属性数据封装

对于普通的基本类型参数,只需要在方法的参数中参数名与前端提交的form表单的name名字一样就可以,传递到后端。
javaBean的例子

package com.spring.controller;

import com.spring.domain.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(path = "user")
public class controller {
    @RequestMapping(path = "hello",headers = {"Accept"})
    public String sayHellow(Account account){
        System.out.println(account);
        return "success";
    }
}

<form method="post" action="user/hello" >
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="text" name="user.name">
    <input type="text" name="user.age">
    <input type="submit" name="submit">
</form>

3、配置解决中文乱码的过滤器

在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、请求参数之集合类型

Account类

public class Account implements Serializable {
    private String username;
    private String password;
    private List<User> list;
    private Map<String,User> map;

controller类

@Controller
@RequestMapping(path = "user")
public class controller {
    @RequestMapping(path = "hello",headers = {"Accept"})
    public String sayHellow(Account account){
        System.out.println(account);
        return "success";
    }
}
<form method="post" action="user/hello" >
    <input type="text" name="username">
    <input type="text" name="password">
    <input type="text" name="list[0].name">
    <input type="text" name="list[0].age">

    <input type="text" name="map['one'].name">
    <input type="text" name="map['one'].age">
    <input type="submit" name="submit">
</form>

5、自定义类型转换器

对于
对于我们在前端页面提交的数据,其实都是以字符串的形式传输到后台的,springMVC,有一个很友好的机制,它有一个类型转换器,可以帮我们转换成对应的参数。比如age这个值,在后台就会转换成Int类型。如果是Date类型的日期数据,如果我们提交的是2000/10/10,springMVC同样也可以帮我们自动转换,但是如果我们提交2000-10-10,就会报错。这个是我们不想的。所以我们要解决这个问题。

User类

public class User {
    private String name;
    private int age;
    private Date date;

controller

@Controller
@RequestMapping(path = "user")
public class controller {
    @RequestMapping(path = "hello",headers = {"Accept"})
    public String sayHellow(User user){
        System.out.println(user);
        return "success";
    }
}

index.jsp

<form method="post" action="user/hello" >
    <input type="text" name="name">
    <input type="text" name="age">
    <input type="text" name="date">
    <input type="submit" name="submit">
</form>

自定义类型转换器类

package com.spring.utils;
import javafx.scene.input.DataFormat;
import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 将字符串转换成日期对象
 */
public class StringToDateConverter implements Converter<String, Date> {
    /**
     * @param s 传入进来的字符串
     * @return
     */
    public Date convert(String s) {
        if(s == null)
            throw new RuntimeException("请您输入数据");
        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
        try {
            return df.parse(s);
        } catch (ParseException e) {
            throw new RuntimeException("数据类型转换错误!!");
        }
    }
}

配置SpringMVC.xml

<!--    配置自定义类型转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
            <property name="converters">
                <set>
                    <bean class="com.spring.utils.StringToDateConverter"></bean>
                </set>
            </property>
    </bean>
    <!--    开启springMVC框架的注解的支持-->
    <mvc:annotation-driven conversion-service="conversionService"/>

这样就可以转换yyyy-mm-dd类型的日期了。
在这里插入图片描述
在这里插入图片描述

6、获取原生Servlet的API

直接在方法参数上加request和response。

@Controller
@RequestMapping(path = "user")
public class controller {
    @RequestMapping(path = "hello",headers = {"Accept"})
    public String sayHellow(HttpServletRequest request, HttpServletResponse response){
        System.out.println(request);
        HttpSession session = request.getSession();
        System.out.println(session);
        ServletContext context = session.getServletContext();
        System.out.println(context);
        System.out.println(response);
        return "success";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值