目录
一、请求映射路径
🚸发现问题:
在controller包下BookController与UserController控制器类中均有一个相同的访问路径(/save)
此时启动项目报错,大致内容为 /save已经被BookController Bean中的方法用过
🚸产生问题:
1、团队多人开发,每人设置不同的请求路径,冲突问题如何解决?
🎊解决方案 :
设置模块名作为请求路径前缀
BookController控制器类 ➠@RequestMapping("/book/save")
UserController控制器类 ➠@RequestMapping("/user/save")
! ! ! 若一个控制器类中有很多方法时,在控制器的类的上面添加注解@RequestMapping(" ")定义整个模块的请求路径前缀
二、请求参数
请求方式
● Get请求
普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
启动服务器
发送Get请求携带一个name的参数
此时后台如何接收?(在方法的形参上传一个相同的参数便可成功接收)
我们再次启动服务器,然后发送请求,后台便可接收到数据
➠携带多个参数
接收成功
Tip:无论是Get请求还是Post请求对于后台代码没有变化(后台不区分Get、Post)
● Post请求
出现中文乱码
Post请求中文乱码处理 ➠ 设置过滤器(为Web容器添加过滤器并指定字符集,Spring—web包中提供了对应的字符过滤器getServletFilters()
)
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
参数种类
● 普通参数
如何解决url地址传参名
与形参变量名
不同时传参 ?
使用@RequestParam(绑定请求参数与形参之间的关系)
注解将请求参数中的name映射到Username
● POJO类型参数
创建pojo类
//POJO参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user){
System.out.println("pojo参数传递 user ==> "+user);
return "{'pojoParam':'pojo param'}";
}
发送请求
接收成功
● 嵌套POJO类型参数
//嵌套POJO参数
@RequestMapping("/containPojoParam")
@ResponseBody
public String containpojoParam(User user){
System.out.println("嵌套pojo参数传递 user ==> "+user);
return "{'containPojoParam':'containPojo param'}";
}
Work实体类
在User实体类中加入Work实体类的属性
发送请求
接收成功
● 数组类型参数
请求参数名与形参属性名相同且请求参数为多个,定义数组类型形参即可接收参数
//数组参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[]like){
System.out.println("数组参数传递 like ==> "+Arrays.toString(like));
return "{'arrayParam':'array param'}";
}
● 集合类型参数
注意事项:List为集合的属性而不是作为集合的数据(实体),因此需使用@RequestParam
绑定参数关系,将数据全部放入。请求参数名与形参属性名也相同!
//集合参数
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String>likes){
System.out.println("集合参数传递 likes ==> "+likes);
return "{'listParam':'list param'}";
}
● 日期类型参数
● 日期类型数据基于系统不同格式也不尽相同【接收形参时,根据不同的日期格式设置不同的接收方式】
◆2022-08-01
◆2022/08/01
◆08/01/2022
@DateTimeFormat(设定日期时间型数据格式);属性:pattern:(日期时间格式字符串)
@RequestMapping("/dataParam")
@ResponseBody
public String commonParam(Date date,@DateTimeFormat(pattern="yyyy-yy-yy") Date date1,@DateTimeFormat(pattern="yyyy/yy/yy HH:mm:ss") Date date2){
System.out.println("日期类型参数传递 date==> "+date);
System.out.println("日期类型参数传递 date1==> "+date1);
System.out.println("日期类型参数传递 date1==> "+date2);
return "{'dateParam':'date param'}";
}
发送请求
接收成功
【问题:其内部是如何工作的 】
●Converter接口(将传递的参数与收集的参数之间的类型进行转换)
三、响应数据
响应页面
//响应页面
@RequestMapping("/toJumpPage")
public String toJumpPage(){
System.out.println("跳转页面");
return "index.jsp";
}
在浏览器中访问成功
文本数据
//响应文本数据
@RequestMapping("/toText")
@ResponseBody
public String toText(){
System.out.println("返回纯文本数据");
return "GY 666";
}
返回成功
响应json数据
@ResponseBody:设置当前控制器当前返回值作为响应体
响应POJO对象
导入json依赖坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
使用@EnableWebMvc注解开启由json数据转换为对象的功能
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan("com.*")
//开启自动转换json数据的支持【@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据自动进行类型转换】
@EnableWebMvc
public class SpringmvcConfig {
}
//响应POJO对象
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json对象数据");
User user=new User();
user.setName("GY");
user.setAge(24);
return user;
}
返回成功
响应POJO集合对象
//响应POJO集合对象
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
System.out.println("返回json集合数据");
User user1=new User();
user1.setName("GY");
user1.setAge(24);
User user2=new User();
user2.setName("YY");
user2.setAge(21);
List<User> userList=new ArrayList<>();
userList.add(user1);
userList.add(user1);
return userList;
}
返回成功