后台服务器程序我们这里是不区分发过来的是get请求还是post请求的,合二为一了。
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
// 接收发过来的请求参数
public String save(String name,Integer age){
// 处理请求
System.out.println("普通参数传递 name ==> " + name);
System.out.println("普通参数传递 age ==> " + age);
return "{'info':'springmvc'}";
}
}
注意:方法的形参名称要和客户端发送请求的请求参数名称相同,不相同则后台服务器接收不到参数。
发送中文数据后台这里乱码
使用Apifox模拟发送请求
后台接收会乱码(实际测试请求,发现只有post会乱码)
解决办法
public class SevletContainersInitConfig extends AbstractDispatcherServletInitializer {
// 在里面追加一个方法(重载自有的一个方法)
// post请求参数乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("utf8");
return new Filter[]{filter};
}
}
为Web容器启动的时候添加字符过滤器,使之可以处理中文。
此外
关于接受参数,还有以下几种形式:
// 请求参数名可以和 这里的形参名不同,但此时需使用@RequestParam注解进行指定映射
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String username,int age)
此外,形参那里还可以用数组,POJO,集合等形式去接收参数,都有各自的不同应用场景
(User user) // 请求参数名 和 形参对象属性名相同
(String[] likes) // 请求参数为多个,且这几个请求参数的名称都为 likes
(@RequestParam List<String> likes)
如果数据在 body里 , 就要用 @RequestBody
传递JSON数据
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
不导这个坐标就会报错:
org.springframework.web.HttpMediaTypeNotSupportedException:
Content type ‘application/json;charset=UTF-8’ not supported
@Configuration
@ComponentScan("controller")
@EnableWebMvc // 开启 JSON数据转对象的功能
public class SpringMVCConfig {
}
// 发送 JSON数据: ["game","music","travel"]
public String save(@RequestBody List<String> likes){
// 处理请求
System.out.println("user save ...");
System.out.println(likes); // [game, music, travel]
return "{'info':'springmvc'}";
}
/**
* 如果发送的是这样的 JSON数据, 则要用 POJO 来接收
{
"name":"南京是否会老师的",
"age":15
}
*/
public String save(@RequestBody User user){
// 处理请求
System.out.println("user save ...");
System.out.println(user); // User{name='南京是否会老师的', age=15}
return "{'info':'springmvc'}";
}