设置请求访问路径
@RequestMapper:将请求访问路径和我们业务层的方法联系起来
@ResponseBody:将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面
两种请求
get请求
post请求
测试案例
@RequestMapping("/getNameAndAge")@ResponseBodypublic 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赋给这里的形参userNamepublic 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")@ResponseBodypublic 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")@ResponseBodypublic String getContainPOJO(User user){System.out.println(user);return "{'info':'containPojo'}";}
请求
结果
数组参数
方法
@RequestMapping("/getList")@ResponseBodypublic String getList(String[] list){System.out.println(Arrays.toString(list));return "{'info':'list'}";}
请求
结果
集合参数
方法
@RequestMapping("/getCollection")@ResponseBodypublic 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")@ResponseBodypublic String getJsonList(@RequestBody List<String> jsonList){System.out.println(jsonList);return "{'info':'jsonList'}";}
请求
结果
json对象
方法
//json对象@RequestMapping("/getJsonPOJO")@ResponseBodypublic String getJsonPOJO(@RequestBody User user){System.out.println(user);return "{'info':'jsonPOJO'}";}
请求
结果
json数组对象
方法
//json对象数组@RequestMapping("getJsonPOJOList")@ResponseBodypublic String getJsonPOJOList(@RequestBody List<Address> jsonPOJOList){System.out.println(jsonPOJOList);return "{'info':'jsonPOJOList'}";}
请求
结果
日期型参数传递
方法
//日期型参数传递@RequestMapping("/getDateParam")@ResponseBodypublic 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;}