在不同的bean中可能会出现相同名字的路径,这样的情况会产生冲突,为了解决这个冲突我们可以设置模块名作为请求路径前缀
@Controller
@RequestMapping("/book")
public class BookController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
@ResponseBody
public String save(){
System.out.println("springMvc is running");
return "{'moudle':'springmvc'}";
}
}
@Controller
@RequestMapping("/user")
public class UserController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
@ResponseBody
public String save(){
System.out.println("springMvc is running");
return "{'moudle':'springmvc'}";
}
}
首先,我们需要下载一个工具来帮助我们发送数据进行测试
叫做postman
下载好了以后先去注册,登陆进去以后用就完了很简单
get请求发送的内容包含在他的请求行中,(get请求没有请求体)
get请求参数接受,只需要在方法设置形参即可接收
//声明控制层的bean的注解
@Controller
@RequestMapping("/user")
public class UserController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
@ResponseBody
public String save(String str,int age){
System.out.println("str is"+str);
System.out.println("age is "+age);
//中文会出错!!稍后来解决
return "测试成功了吗"+str+age;
}
}
Post请求的发送和接收
Post请求需要放在请求体里进行发送,我们选择Boddy下的第三个选项
(第二个选项主要用来传送文件)
Post请求的接受,同样给方法设置形参就可以
@Controller
@RequestMapping("/book")
public class BookController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
@ResponseBody
public String save(String name){
System.out.println("Post is running"+name);
return "wo shi post";
}
}
//设置过滤器解决中文乱码问题
@Override
protected Filter[] getServletFilters(){
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
首先我们看看不使用Spring框架如何解决该问题
Post协议
使用字符缓冲流来输入数据,因此我们可以给缓冲流定义写入格式(utf-8)
Get协议
采用的是ISO-8859-1编码成二进制,而我们的Idea默认使用(utf-8),会造成冲突。
解决方法:我们将得到的异常文字通过ISO-8859-1重新编码成为二进制,再通过二进制转化做utf-8。(这是因为我们无法修改Tomcat的编码方式)
在SpringMvcConfig配置类中重写过滤器方法
(对web容器添加字符过滤器使其可以处理中文)
//设置过滤器解决中文乱码问题
@Override
protected Filter[] getServletFilters(){
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
如果我们传递的参数是name,但是我们想要以不同的名称接受我们该如何传递呢?
我们可以使用@Requestparam("传递来参数的名字")注解进行声明
@RequestMapping("/save")
//设置当前注解的返回值类型,将返回的内容整体作为响应给到外面
@ResponseBody
public String save(@RequestParam("name") String UserName){
System.out.println("Post is running“+UserName);
return "wo shi post";
}
1、传递pojo
传递时,变量名和pojo属性相同,传递进来会自动封装成对象
@RequestMapping("/pojoParm")
@ResponseBody
public String pojoParm(User user){
System.out.println(user);
return "pojo is running";
}
2、传递pojo类(这个pojo类中的属性含引用数据类型)
接受不产生变化
传递需要产生变化
以引用类型.属性名的方式进行添加
3、传递数组信息
传递时需要以统一的变量名进行传递
以数组的方式进行接受
@RequestMapping("/likes")
@ResponseBody
public String like(String[] like){
System.out.println(Arrays.toString(like));
return "like is running";
}
4、传递一个集合
集合作为一个引用数据类型,Spring会自动将其作为一个对象进行处理,对于对象的处理方法是先创建一个对象再把对象其属性set进去。
我们希望外部的内容作为集合的数据出现,而不是给“集合”这种对象的属性进行赋值。
我们可以使用注解@RequestParam进行声明
注意:这里传入的集合必须是List,博主尝试了ArrayList报错了,还没尝试其他集合。
@RequestMapping("/listParam")
@ResponseBody
public String like(@RequestParam List list){
System.out.println(list);
return "list is running";
}