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