SpringMVC技术与Servlet技术功能等同,均属于web层开发技术
SpringMVC是一种基于Java实现MVC模型的轻量级web框架
SpringMVC是一种表现层框架技术
SpringMVC用于进行表现层功能开发
@Controller
类型:类注解
位置:springmvc控制器类定义上方
作用:设定springmvc的核心控制器Bean
@Controller
public class UserController {
}
@RequestMapping
类型:方法注解
位置:springmvc控制器方法定义上方
作用:设置当前控制器方法请求访问路径
value(默认):请求访问路径
@RequestMapping("/save")
public String save(){
System.out.println("user save...");
return "{'module':'springmvc'";
}
## @ResponseBody
类型:方法注解
位置:springmvc控制器方法定义上方
作用:设置当前控制器方法响应内容为当前返回值,无需解析
```java
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前操作的返回值类型
@ResponseBody
public String save(){
System.out.println("user save...");
return "{'module':'springmvc'";
}
工作流程分析
请求与响应
请求映射路径
@RequestMapping
类型:方法注解 类注解均是
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
value:请求访问路径或访问路径前缀
请求方式
- GET请求
普通参数
普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接受参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name,Integer age ){
System.out.println("普通参数传递 name==>"+name);
System.out.println("普通参数传递 age==>"+ age);
return "{module':'common param'}";
}
- POST请求
普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name,Integer age ){
System.out.println("普通参数传递 name==>"+name);
System.out.println("普通参数传递 age==>"+ age);
return "{module':'common param'}";
}
@RequestParam
类型:形参注解
位置:springmvc控制器方法形参定义前面
作用:绑定请求参数与处理器方法形参间的关系
参数:
required :是否为必传参数
defaultValue:参数默认值
@RequestMapping("/commonParamDifferentName")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name")String username, int age ){
System.out.println("普通参数传递 username==>"+username);
System.out.println("普通参数传递 age==>"+ age);
return "{module':'common param different name'}";
}
参数种类:
普通参数
-POJO类型参数
pojo参数:请求参数名与形参对象属性名相同,定义pojo类型即可接受参数
//POJO参数
@RequestMapping("/POJOParam")
@ResponseBody
public String POJOParam(User user ){
System.out.println("POJO参数传递 user==>"+user);
return "{module':'POJO param '}";
}
嵌套POJO类型参数
pojo对象中包含pojo对象
嵌套pojo参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接受嵌套Pojo属性参数
//嵌套POJO参数
@RequestMapping("/POJOContainParam")
@ResponseBody
public String POJOContainParam(User user ){
System.out.println("POJO嵌套参数传递 user==>"+user);
return "{module':'POJO param '}";
}
数组类型参数
数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接受参数
//数组参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes ){
System.out.println("数组参数传递 likes==>"+ Arrays.toString(likes));
return "{module':'array param '}";
}
集合类型参数
集合保存普通参数:请求参数名与形参集合对象名形同且请求参数为多个,@RequestParam绑定参数关系
//集合参数
@RequestMapping("/listParam")
@ResponseBody
public String listParam( @RequestParam List <String> likes ){
System.out.println("集合参数传递 likes==>"+likes);
return "{module':'lisy param '}";
}
请求参数(传递Json数据)
@EnableWebMvc
开启自动转换json数据的支持
类型:配置类注解
位置:springmvc配置类定义上方
作用:开启springmvc多项辅助功能
@Configuration
@ComponentScan("com.example.springmvc_02_request_param.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
@RequestBody
类型:形参注解
位置:springmvc控制器方法形参定义前面
作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
//集合参数:json格式
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson( @RequestBody List <String> likes ){
System.out.println("list common(json)参数传递 likes==>"+likes);
return "{module':'list common for jason param '}";
}
pojo参数:json数据与形参对象属性相同,定义Jopo类型形参即可接受参数
//POJO参数:json格式
@RequestMapping("/POJOParamForJson")
@ResponseBody
public String POJOParamForJson(@RequestBody User user ){
System.out.println("POJO(json)参数传递 user==>"+user);
return "{module':'POJO for json param '}";
}
pojo集合参数:json数组数据与集合泛型属性名相同,定义list类型形参即可接受参数
//集合参数:json格式
@RequestMapping("/listPojoParamForJson")
@ResponseBody
public String listPojoParamForJson( @RequestBody List <User> likes ){
System.out.println("list pojo(json)参数传递 likes==>"+likes);
return "{module':'list pojo for jason param '}";
}
@RequestBody与@RequestParam的区别
日期型参数传递
//日期参数
@RequestMapping("/dataParam")
@ResponseBody
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("参数传递 date==>"+date);
System.out.println("参数传递date1( yyyy-MM-dd)==>"+date1 );
System.out.println("参数传递date1( yyyy/MM/dd HH:mm: ss)==>"+date2 );
return "{module':'date param '}";
}
@DateTimeFormat
类型:形参注解
位置:springmvc控制器方法形参前面
作用:设定日期时间型数据格式
pattren:日期时间格式字符串
响应
响应文本数据
//响应文本数据
@RequestMapping("/toText")
@ResponseBody
public String toText(){
System.out.println("返回纯文本数据");
return "response text";
}
响应json数据(对象转json)
//响应pojo对象
@RequestMapping("/toJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
System.out.println("返回json对象数据");
User user = new User();
user.setName("itcast");
user.setAge(15);
return user;
}
@ResponseBody
类型:方法注解
位置:springmvc控制器方法定义上方
作用:设置当前控制器返回值作为响应体
REST风格
REST:表现形式状态转换
优点:
- 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
- 书写简化
@RequestMapping
类型:方法注解
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求路径
属性:value(默认):请求访问路径
method:http请求动作,标准动作9GET/POST/DELETE)
@PathVariable
类型:形参注释
位置:SPringMVC控制器方法形参定义前面
作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
@RequestBody、@RequestParam 、@PathVariable的区别