java框架(2.3)参数的接收

  • • 发表于 7年前
  • • 作者 大妖怪
  • • 2683 人浏览
  • • 3 条评论
  • • 最后编辑时间 7年前
  • • 来自 [技 术]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

上章我们讲到用@RequestBody注解接收参数和不用@RequestBody进行了对比,发现这个这个注解注解到要接收的参数上就能接收json格式的参数。那么今天来具体说说接收参数这件事。
我们从前端接收参数有四种方式:

  • 普通的直接传参
  • 通过httpServletRequet接收参数
  • 通过对象接收参数
  • 通过restful风格的URl接收参数
    下面具体了解下:
  • 普通的直接传参:

接收String:

@RequestMapping("/String")
public void StringTest(String name){
    System.out.println(name);
}

如果我们访问这个地址,并且随便通过一种方式穿个参数:

我们在控制台就可以看到接收到的参数了:

接收int:

@RequestMapping("/int")
public void intTest(int age){
    System.out.println(age);
}

同样传个参数试试:

也接收到了:

那么,我们看看如果在int类型传入一个字符串:

这时候的结合是控制台就不会打印内容了。原因是没有访问到地址。
当我们传入的是一个参数,访问的时候,SpringMVC不仅会通过RequestMapping来匹配方法,同时还要根据参数类型来确定方法。因此在这我们没有访问到要访问的方法。

  • 通过httpServletRequet接收参数
    这个就是之前Servlet学到的通过request来接收参数,首先我们需要导入servlet-api依赖:
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.0-b07</version>
      <scope>provided</scope>
    </dependency>
    
    然后写上代码:
    @RequestMapping("/request")
    public void request(HttpServletRequest request){
      String name = (String) request.getParameter("name");
      System.out.println(name);
    }
    
    有没有发现和servlet几乎一模一样?反正之前servlet用的方法在这都能用,下去可以自行测试。
  • 通过对象接收一个参数:
    比如说,我们有一个对象叫做user,user里面包含了name和age两个字段。如果我们接收的时候name还有age一个个接收就会显得太乱,特别是真正项目中字段很多的情况下,不仅看起来很乱,而且不好维护。于是强大的SpringMVC再次给我们提供了允许按对象来接收的支持:
    • 首先新建一个包param,然后创建一个user对象:
package com.demo.param;

public class User {
    private String name;

    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
  • 然后新建一个方法:
@RequestMapping("/obj")
    public void obj(User user){
        System.err.println(user.getName());
        System.err.println(user.getAge());
    }


可以看出我们的参数都打印出来了(虽然是红的,但是没影响~):

  • restful接收参数:
    前面貌似讲到restful,就是在地址映射上加上{参数},这个有两种方式:
    • @PathVariable不带参数注解
      @RequestMapping("/restful/{name}")
      public void restful(@PathVariable String name){
      System.out.println(name);
      }
      
    • @PathVariable带参数注解
      @RequestMapping("/restful/{name}")
      public void restful(@PathVariable("name") String aaa){
      System.out.println(aaa);
      }
      
      具体就不演示了,来总结下每种方式的注意点:
  • 普通的直接传参
    • 接收的变量的名称必须和传入参数的类型和名称一致
  • 通过httpServletRequet接收参数
    • 需要导入servlet-api依赖
  • 通过对象接收参数
    • 对象的字段必须和要传入参数的类型和名称一致,弱不一致则不一致的部分参数接收不到
  • 通过restful风格的URl接收参数
    • 参数在url上必须使用{}包裹,并且在接收的字段前必须加上@PathVariable注解
    • 若接收字段变量和{}内的内容一致,则@PathVariable的value属性可加可不加,若加value属性(value=””可以直接省略为””),必须和{}内的内容一致
    • 若接收字段变量和{}内的内容不一致,则@PathVariable的value属性必须加,同value=””可以直接省略为””,必须和{}内的内容一致.

另外附上源码:https://github.com/YaoguaiDa/SpringMVC_Demo
由于开发环境变了,所以我在pom build节点下声明的maven使用jdk版本,本次开始代码都上传github,下章抽出一章讲git。

分享到:
3条评论
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回复:200 积分:7517

已加入社区[2943]天

梦里巷口,可有你倚门回首

作者详情》
Top