SpringMVC--多种类型参数提交

SpringMVC–参数

  1. 表单传Date,String值
  2. 表单传对象
  3. 表单传List集合
  4. 表单传Map集合
  5. 传JSON参数

表单传Date,String值

<h1>测试参数</h1>
    <form action="test1" method="post">
        Name<input type="text" name="stname">
        Age<input type="text" name="age">
        Birthday<input type="date" name="birthday">
        <input type="submit" value="提交">
    </form>

这里要注意的是spring自带的日期转换只会转换xxxx/xx/xx,所以我们得重写日期转换类.代码如下:

/**
 * 日期转换器 年月日, xxxx-xx-xx,xxxx/xx/xx
 */
public class MyDateConverter implements Converter<String,Date> {

    @Override
    public Date convert(String value) {
        SimpleDateFormat sdf=null;
        Date ok=null;
        if (value.contains("年")){
            sdf=new SimpleDateFormat("yyyy年MM月dd日");
        }else if (value.contains("-")){
            sdf=new SimpleDateFormat("yyyy-MM-dd");
        }else if (value.contains("/")){
            sdf=new SimpleDateFormat("yyyy/MM/dd");
        }
        try {
            ok=sdf.parse(value);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return ok;
    }
}

并且要在配置类进行配置

<!--    配置spring mvc注解驱动(开启mvc组件)-->
    <mvc:annotation-driven conversion-service="datezhuanhuan"/>
<!--    日期转换器-->
    <bean id="datezhuanhuan" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
            <property name="converters">
                <list>
                    <bean class="Mr_xiao.uitl.MyDateConverter" />
                </list>
            </property>
    </bean>

注意:转换器id与conversion-service要相同
测试类如下:

@RequestMapping("/test1")
    public String test1(String stname, int age, Date birthday){
        System.out.println("stname="+stname);
        System.out.println("age="+age);
        System.out.println("birthday="+birthday);
        return  "success";
    }

注意测试类顶部记得加@Controller

表单传对象

首先创一个实体类

public class Student {
    String stname;
    int age;
    Date birthday;

    public String getStname() {
        return stname;
    }

    public void setStname(String stname) {
        this.stname = stname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stname='" + stname + '\'' +
                ", age=" + age +
                ", birthday=" + birthday +
                '}';
    }
}

再用表单传student对象
代码如下:

<h1>测试参数</h1>
    <form action="test2" method="post">
        Name<input type="text" name="stname">
        Age<input type="text" name="age">
        Birthday<input type="date" name="birthday">
        <input type="submit" value="提交">
    </form>

注:表单组件name要与实体类属性名相同

测试类:

//接收对象
    @RequestMapping("/test2")
    public String test2(Student stu){
        System.out.println("对象="+stu);
        return  "success";
    }

表单传list集合

首先创建两个实体类


/**
 * 商品类
 */
public class Goods {
    String name;
    int num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}
/**
 * 购物车
 */
public class Cart {
    List<Goods> list;
    Map<String,Goods> map;

    public Map<String, Goods> getMap() {
        return map;
    }

    public void setMap(Map<String, Goods> map) {
        this.map = map;
    }

    public List<Goods> getList() {
        return list;
    }

    public void setList(List<Goods> list) {
        this.list = list;
    }

    @Override
    public String toString() {
        return "Cart{" +
                "list=" + list +
                ", map=" + map +
                '}';
    }
}

表单如何传参?
如下:

<h1>测试list集合</h1>
    <form action="test3" method="post">
        <input type="text" name="list[0].name" />
        <input type="text" name="list[0].num" />
        <br />
        <input type="text" name="list[1].name" />
        <input type="text" name="list[1].num" />
        <br />
        <input type="text" name="list[2].name" />
        <input type="text" name="list[2].num" />
        <input type="submit" value="提交">
    </form>

测试类

//直接接收 list<Goods>集合
    @RequestMapping("/test3")
    public String test3(Cart cart){
        System.out.println("购物车="+cart);
        return  "success";
    }

表单传map集合

map与list唯一不同之处在于表单组件的name值
即:

<h1>测试map集合</h1>
    <form action="test3" method="post">
        <input type="text" name="map['商品1'].name" />
        <input type="text" name="map['商品1'].num" />
        <br />
        <input type="text" name="map['商品2'].name" />
        <input type="text" name="map['商品2'].num" />
        <br />
        <input type="text" name="map['商品3'].name" />
        <input type="text" name="map['商品3'].num" />
        <input type="submit" value="提交">
    </form>

其他代码块都相同。

JSON传参

使用JSON得先导入jar包
使用maven导入:

<!--    JSON转换类-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>
  </dependencies>

可用按钮传值进行测试

<h1>传Json参数 --传统表单NONONO</h1>
    <button id="testjson">SEND</button>
<script>
        $(function () {
            $("#testjson").click(function () {
                var xm = {"name": "小米", "num": 12};
                $.ajax({
                    url: 'anno/testjson',
                    type: 'post',
                    contentType: 'application/json',
                    data: JSON.stringify(xm),
                    success: function (data) {
                        alert(data)
                    }
                })
            })
</script>

测试类是如何接收?
如下:

//参数可以是 JSON  requestBody
    @RequestMapping("/testjson")
    public String testjson(@RequestBody Goods sp){
        System.out.println("对象:"+sp);
        return  "success";
    }

json关键注释:@RequestBody

拓展

中文乱码处理,表单提交难免会遇到中文乱码

只需要一步:在web.xml进行配置

<!--  处理中文乱码-->
  <filter>
    <filter-name>charcode</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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>charcode</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样就不会中文乱码啦…

参数可设置默认值

关键注释:@RequestParam
案例:

//参数可加默认值 requestParam
    @RequestMapping("/test1")
    public String test1(@RequestParam(name = "stname",defaultValue = "张三") String stname){
        System.out.println("stname="+stname);
        return  "success";
    }

也可以在代码块进行判断赋值,不过springmvc给我们写了一个注释何必去自己判断呢,不用白不用,hhh

默认值有什么好处呢

像我们平时做分页查询,页码就可以设置默认值,当用户不传值,可让页面默认显示第一页…


大概内容就这些,第一次发表文章没经验,还望各位好友包涵
有问题评论区提问!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碰磕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值