原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处
上章我们讲到用@RequestBody注解接收参数和不用@RequestBody进行了对比,发现这个这个注解注解到要接收的参数上就能接收json格式的参数。那么今天来具体说说接收参数这件事。
我们从前端接收参数有四种方式:
接收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来匹配方法,同时还要根据参数类型来确定方法。因此在这我们没有访问到要访问的方法。
<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用的方法在这都能用,下去可以自行测试。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());
}
可以看出我们的参数都打印出来了(虽然是红的,但是没影响~):
@RequestMapping("/restful/{name}")
public void restful(@PathVariable String name){
System.out.println(name);
}
@RequestMapping("/restful/{name}")
public void restful(@PathVariable("name") String aaa){
System.out.println(aaa);
}
具体就不演示了,来总结下每种方式的注意点:另外附上源码:https://github.com/YaoguaiDa/SpringMVC_Demo
由于开发环境变了,所以我在pom build节点下声明的maven使用jdk版本,本次开始代码都上传github,下章抽出一章讲git。