设置请求访问路径
@RequestMapper:将请求访问路径和我们业务层的方法联系起来
@ResponseBody:将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面
两种请求
get请求
post请求
测试案例
@RequestMapping("/getNameAndAge")
@ResponseBody
public String getNameAndAge(String name,int age){
System.out.println("name:"+name);
System.out.println("age:"+age);
return "{'info':'Param'}";
}
get
post
postman中 勾选Body下的x-www-form-urlencoded表单填写参数
解决post请求中文乱码问题
//解决post请求中文乱码
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
5种参数类型传递
普通参数
方法
//普通参数
@RequestMapping("/getNormalParam")
@ResponseBody
//将请求参数中的name赋给这里的形参userName
public String getNormalParam(@RequestParam("name") String userName, int password){
System.out.println("userName:"+userName);
System.out.println("password:"+password);
return "{'info':'normalParam'}";
}
用@RequestParam注解让和形参不同名的参数对应起来
请求
结果
POJO参数
User实体类
@Data
public class User {
public String userName;
public int password;
}
方法
@RequestMapping("/getPOJO")
@ResponseBody
public String getPOJO(User user){
System.out.println(user);
return "{'info':'pojo'}";
}
请求
这里传递的参数要和实例类中的属性名保持一致
结果
嵌套POJO参数
User实体类,嵌套Address
@Data
public class User {
public String userName;
public int password;
public Address address;
}
@Data
public class Address {
public String province;
public String city;
}
方法
@RequestMapping("/getContainPOJO")
@ResponseBody
public String getContainPOJO(User user){
System.out.println(user);
return "{'info':'containPojo'}";
}
请求
结果
数组参数
方法
@RequestMapping("/getList")
@ResponseBody
public String getList(String[] list){
System.out.println(Arrays.toString(list));
return "{'info':'list'}";
}
请求
结果
集合参数
方法
@RequestMapping("/getCollection")
@ResponseBody
public String getList(@RequestParam("list") List<String> foodList){
System.out.println(foodList.toString());
return "{'info':'collection'}";
}
需要添加一个@RequestParam注解让SpringMVC知道这是传进来的参数,否则会把List<String>当成一个实体类
请求
结果
json数据传递
首先先导入json的依赖jar包
开启@EnableWebMvc
@Configuration
@ComponentScan({"com.example"})
@EnableWebMvc//开启json等一系列功能
public class SpringMVCConfig {
}
postman中发送json数据(在Body中以raw的形式填写json数据)
方法中用@RequestBody来把请求体Body中的json绑定到我们业务层方法的形参上,且这个注解一个方法只能用一次。
json数组
方法
//json数组
@RequestMapping("/getJsonList")
@ResponseBody
public String getJsonList(@RequestBody List<String> jsonList){
System.out.println(jsonList);
return "{'info':'jsonList'}";
}
请求
结果
json对象
方法
//json对象
@RequestMapping("/getJsonPOJO")
@ResponseBody
public String getJsonPOJO(@RequestBody User user){
System.out.println(user);
return "{'info':'jsonPOJO'}";
}
请求
结果
json数组对象
方法
//json对象数组
@RequestMapping("getJsonPOJOList")
@ResponseBody
public String getJsonPOJOList(@RequestBody List<Address> jsonPOJOList){
System.out.println(jsonPOJOList);
return "{'info':'jsonPOJOList'}";
}
请求
结果
日期型参数传递
方法
//日期型参数传递
@RequestMapping("/getDateParam")
@ResponseBody
public String getDateParam(Date d1, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date d2,@DateTimeFormat(pattern = "yyyy年MM月dd日 HH:mm:ss") Date d3){
System.out.println(d1);
System.out.println(d2);
System.out.println(d3);
return "'info':'date'";
}
在方法参数中用@DateTimeFormat指定pattern为我们需要的日期格式
请求
结果
正确被解析的字符串会被转化为Date类型赋给方法中的形参
响应
响应页面(了解)
// 响应
//响应页面(没啥用,因为后面都是异步请求)
@RequestMapping("/jump")
public String jumpToJsp(){
System.out.println("跳转到test.jsp");
return "/test.jsp"; //这里加一个 / 表示从webapp开始的路径
}
响应文本数据
方法
//响应文本数据
@RequestMapping(value = "/responseText",produces="text/html;charset=UTF-8;")
@ResponseBody //加上这个注解表示将这个方法的返回值作为响应数据
public String responseText(){
return "返回文本数据";
}
请求及响应结果
响应json数据
响应json对象
方法
/*
响应json对象:方法直接返回json对象即可
*/
@RequestMapping("/responseJsonPOJO")
@ResponseBody //加上这个注解表示将这个方法的返回值作为响应数据
public User responseJsonPOJO(){
User user = new User("李四", 444, new Address("福建", "厦门"));
return user;
}
请求及响应结果
响应json对象数组
方法
/*
响应json对象数组:方法直接返回json对象数组即可
*/
@RequestMapping("/responseJsonPOJOList")
@ResponseBody //加上这个注解表示将这个方法的返回值作为响应数据
public List<User> responseJsonPOJOList(){
ArrayList<User> users = new ArrayList<>();
users.add(new User("绽放三",123,new Address("福建", "泉州")));
users.add(new User("李四",444,new Address("福建", "厦门")));
users.add(new User("哇我",6898,new Address("四川", "成都")));
return users;
}