请求映射路径的书写
- 我们可以将@RequestMapping注解放到控制层类前,,这样在控制层里面的所有方法前缀都会添加其共有的部分,见代码展示如下:
@Controller
@RequestMapping("/book")
public class BookController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("book save ... ");
return "{'module':'book save'}";
}
}
请求
- 对普通参数的请求,可以直接使用形参与请求名相同的方式直接获取,并且没有特殊要求,Get与POST请求都可以直接接收,详细代码如下:
@Controller
public class UserController {
@RequestMapping("/commonParam")
@ResponseBody
//普通参数传递
public String commonParam(String username, int age) {
System.out.println("普通参数传递:" + username + ",age:" + age);
return "{'module':' common param'}";
}
}
- 这里get与post都可以
*(Post)乱码处理: 有时候我们会遇到参数值为中文的情况,这时需要在继承了AbstracrAnnotationConfigDispatchServletInitialiter
接口的servlet
配置类中进行过滤处理,详细代码如下:
public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[0];
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//乱码处理
@Override
protected Filter[] getServletFilters() {
//字符过滤器
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
//多个过滤器用逗号隔开
return new Filter[]{filter};
}
}
五种参数类型的传递
- 普通类型
- 形参
- POJO
- 数组
- 集合
具体代码如下,可以根据代码找到自己想找的部分:
@Controller
public class UserController {
@RequestMapping("/commonParam")
@ResponseBody
//普通参数传递
public String commonParam(String username, int age) {
System.out.println("普通参数传递:" + username + ",age:" + age);
return "{'module':' common param'}";
}
//普通参数:请求参数名与形参名不同
// @RequestParam注解,参数:required:是否为必传参数,defaulfValue:默认参数值
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferName(@RequestParam("name") String username, @RequestParam("age") int age) {
System.out.println("普通参数传递 username==>" + username);
System.out.println("普通参数传递 age==>" + age);
return "{'module':'commonParamDifferName'}";
}
//POJO参数
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user) {
System.out.println("pojo参数传递==>" + user);
return "{'module':'pojoParam'}";
}
//嵌套POJO参数
//传递时使用address.city
@RequestMapping("/pojoContainParam")
@ResponseBody
public String pojoContainParam(User user) {
System.out.println("pojo嵌套pojo参数传递==>" + user);
return "{'module':'pojoContainParam'}";
}
//数组操作
//会自动识别
@RequestMapping("arrayParam")
@ResponseBody
public String arrayParam(String[] likes) {
System.out.println("pojo嵌套pojo参数传递==>" + likes.toString());
return "{'module':'arrayParam'}";
}
//集合参数
@RequestMapping("listParam")
@ResponseBody
public String listParam(@RequestParam List<String> list) {
System.out.println("pojo嵌套pojo参数传递==>" + list.toString());
return "{'module':'listParam'}";
}
}
JSON数据传递参数
①添加坐标、
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.2.1</version>
<!-- <version>2.9.0</version>-->
</dependency>
②发送JSON数据
③开启自动转换对json数据的支持
@Configuration
@ComponentScan("com.itheima.controller")
//开启由Json转换为对象
@EnableWebMvc
public class SpringMvcConfig {
}
④设置接收json数据
//集合参数:json格式
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes) {
System.out.println("list common(json)传递参数==>" + likes);
return "{'module':'list common ForJson'}";
}
//POJO参数:json格式
@RequestMapping("/pojoParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody User user) {
System.out.println("pojo(json)传递参数==>" + user);
return "{'module':'listParamForJson'}";
}
//集合参数:json格式
@RequestMapping("/listpojoParamForJson")
@ResponseBody
public String listPojoParamForJson(@RequestBody List<User> list) {
System.out.println("pojo(json)传递参数==>" + list);
return "{'module':'list pojo Param For Json param'}";
}
日期参数类型传递
(详见代码部分注释)
//日期参数
@RequestMapping("/dateParam")
@ResponseBody
//2088/08/08可以直接匹配Date,说明这是一个标准格式
//date1的格式
public String dataParam(Date date, @DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")Date date2) {
System.out.println("data传递参数==>" + date);
System.out.println("data传递参数==>" + date1);
System.out.println("data传递参数==>" + date2);
return "{'module':'data param'}";
}
类型转换器
- Converter接口,这是日期转换的具体接口,可以自行深入理解,这里只是概述
public interface Converter<S,T>{
@Nullable
T convert(S var1);
}
-
- 请求参数年龄数据(String -> Integer)
- 日期格式转换(String ->Date)
-
EnableWebMvc功能之一:根据类型匹配对应的类转化器,必须打开,即在SpringConfig.java中添加注解(之前已添加)
响应
- 详见代码注释部分,讲解了对应的知识点,与实例代码如下:
@Controller
public class UserController {
//响应页面/跳转页面
//在Spring中只要返回字符串,字符串为页面名称就可以直接跳转
@RequestMapping("/toJumpPage")
public String toJumopage() {
System.out.println("跳转页面");
return "page.jsp";
}
//响应文本数据
// @ResponseBody注解表示将函数的返回值返回一个字符串,而不是JSON,默认是页面
@RequestMapping("/toText")
@ResponseBody
public String toText() {
System.out.println("返回纯文本数据");
return "response text";
}
//响应POJO对象--Json数据
// @ResponseBody注解--函数返回值是POJO类,Jackson会帮助我们返回json
@ResponseBody
@RequestMapping("/toJsonPOJO")
public User toJsonPOJO() {
System.out.println("返回json对象数据");
User user = new User();
user.setUsername("张三");
user.setAge(18);
return user;
}
//响应POJO集合对象,与上面的相同
@ResponseBody
@RequestMapping("/toJsonList")
public List<User> toJsonList() {
System.out.println("返回json对象集合数据");
User user1 = new User();
user1.setUsername("张三");
user1.setAge(18);
User user2 = new User();
user2.setUsername("张三");
user2.setAge(18);
List<User> list = new ArrayList();
list.add(user1);
list.add(user2);
return list;
}
}
相关注释说明:
- 名称:@ResponseBody
- 类型:方法注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器返回值作为响应体,String->文本,集合与POJO转换为JSON