SpringMVC请求与响应
请求映射路径
- 名称:@RequestMapping
- 类型:方法注解、类注解
- 位置:SpringMVC控制器方法定义上方
- 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
- 范例:
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save");
return"{'module':'user save'}";
}
}
- 属性
value(默认):请求访问路径,或访问路径前缀
参数种类
普通参数、POJO参数、嵌套POJO类型参数、数组类型参数、集合类型参数
- 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接受参数。
请求参数与形参名不同时可以在形参前面加入@RequestParam(“请求参数名”)
@RequestParam形参注解,位于SpringMVC控制器方法形参定义前面,能够绑定请求参数与处理器方法形参间的关系
- Get请求传参
@RequesMapping("/commonParam")
@ResponseBody
public String commParam(@RequestParam("name")String us erName , int 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,int age){
System.out.println("普通参数传递 name ==>"+name);
System.out.println("普通参数传递 age ==>"+age);
return"{'module':'common param'}";
}
- Post请求中文乱码处理
为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
protected Filter[] getServletFilters(){
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
}
- POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
@RequesMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user) {
System.out.println("pojo参数传递 user ==>"+user);
return"{'module':'pojo param'}";
}
- 嵌套POJO参数:POJO对象中包含POJO对象,请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
public calss User{
private String name;
private int age;
private Address address;
}
public class Address{
private String province;
private String city;
}
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
System.out.println("pojo嵌套pojo参数传递 user==>"+user);
return"{'module':'pojo contain pojo param'}";
}
- 数组参数:请求参数名与形参对象属性名相同切请求参数为多个,定义数组类型形参即可接收参数
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
System.out.println("数组参数传递 likes ==>" +Arrays.toString(likes));
return"{'moudle':'array param'}";
}
请求参数(传递json数据)
@EnableWebMvc配置类注解,在SpringMVC配置类定义上方,用于开启SpringMVC多项辅助功能
@RequestBody形参注解,在SpringMVC控制器方法形参定义前面,用于将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
①:添加json数据相关坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependeny>
②:设置发送json数据
③:开启自动转换json数据的支持
@Configuration
@ComponentScan("com.mei.controller")
@EnableWebMvc
public class SpringMvcConfig{
}
④:设置接收json数据
@RequestMapping("/listParamJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
System.out.println("list common(json)参数传递 list ==>"+likes);
return"{'moudle':'list common for json param'}";
}
日期类型参数传递
@DateTimeFormat形参注解,位于SpringMVC控制器方法形参前面,作用是设定日期时间型数据格式,属性pattern
- 日期类型数据基于系统不同格式也不尽相同
接收形参是,根据不同日期格式设置不同的接收方法
@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("参数传递 date(yyyy-MM-dd)==>"+date1);
System.out.println("参数传递 date(yyyy/MM/DD HH:mm:ss)==>"+date2);
return "{'moudle': 'data param'}";
}
http://localhost/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
类型转换器
- Converter接口
public interface Converter<S, T> {
@Nullable
T convert(S var1)
}
请求参数年龄数据(String→Integer)
日期格式转换(String→Date)
- @EnableWebMvc功能之一:根据类型匹配对应的类型转换器
响应
@ResponseBody方法注解,位于SpringMVC控制器方法定义上方,作用为设置当前控制器返回值作为响应体
- 页面响应
@RequestMapping("toPage")
public String toPage(){
return "page.jsp";
}
- 相应文本数据
@RequestMapping("/toText")
@ResponseBody
public String toText(){
return "response text";
}
- 相应json数据(对象转json)
@RequestMapping("/tpJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
User user = new User();
user.seName("张三");
user.setAge(41);
return user;
}
- 响应json数据(对象集合转json数组)
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
User.user1 = new User();
user1.setName("张三");
user1.setAge(41);
User user2 = new User();
user2.setNmae("李四")
user2.setAge(40);
List<User> userList = new ArrayList<User>();
userList.add(user1);
userList.add(user2);
return userList;
}
- HttpMessageConverter接口
public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz,@Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz,@Nullable MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> class,HttpInputMessage inputMessage)
throws IOException,HttpMessageNotReadableException;
void wirte(T t,@Nullable MediaType contentType,HttpOutputMessage outputMessage)
throws IOEception,HttpMessageNoWritableException;
}