1. 请求映射路径:接口按照“模块名/功能名"规则来定义,模块前辍可以定义在每个功能方法前面,也可以定义到bean最外面,
@Controller
@RequestMapping("/user") 注:模块前辍定义到最外面,只定义一次就行
public class UserController
{
@RequestMapping("/save") 注:如果类外面没有定义模块前辍,就在这里定义。例:@RequestMapping("/user/save")
@ResponseBody
public String save()
{
return "";
}
}
2. 请求参数:两种请求后台处理代码都是一样的,发送的参数名要和后台方法的形参名一致
如果想让后台方法接收和形参不同名的参数,可以在形参前加注解@RequestParam("发送的参数名")
¤ Get请求
@Controller
public class UserController
{
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ......) 注:name用于接收参数,多个参数接着后面写就是
{
return "";
}
}
get请求参数写在请求链接上,用?连接xx=xx形式,多个参数间用&隔开
¤ Post请求
@Controller
public class UserController
{
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name ......) 注:name用于接收参数,多个参数接着后面写就是
{
return "";
}
}
post请求参数写在body里面,有如下几种类型
♦ none
♦ form-data 表单,文件
♦ x-www-form-urlencoded 表单
♦ raw
♦ binary
♦ GraphQL
post请求发送中文参数时乱码解决,在ServletContainersInitConfig配置类里面添加过滤器
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer
{
..........
@Override
protected Filter[] getServletFilters()
{
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter}; 注:如果有多个过滤器,可以创建好对象,统一添加到数组里。
}
}
¤ 参数种类
♦ POJO类型参数
定义好POJO对象,对象内属性名和发送参数名一样,就能自动封装成对象给接收方法
public class User
{
private String name;
private int age;
public String getName(){return name;}
public void setName(String name){this.name = name;}
public int getAge(){return age;}
public void setAge(int age){this.age = age;}
}
接收方法
@RequestMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user)
{
........
return "";
}
♦ 嵌套POJO类型参数
public class Address
{
private String city;
public String getCity(){return city;}
public void setCity(String city){this.city = city;}
}
public class User
{
private String name;
private int age;
private Address address;
public String getName(){return name;}
public void setName(String name){this.name = name;}
public int getAge(){return age;}
public void setAge(int age){this.age = age;}
public int getAddress(){return address;}
public void setAddress(Address address){this.address = address;}
}
发送参数时user基本属性还是一样,user引用的其它的对象参数用"属性名.属性名=xxx"的方式。例:address.city="beijing"
♦ 数组类型参数
接收方法
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes)
{
........
return "";
}
发送参数时使用接收方法的形参名发送多个参数。例:likes=game&likes=music&likes=book
♦ 集合类型参数
接收方法
@RequestMapping("/listParam")
@ResponseBody
public String listParam(@RequestParam List<String> likes)
{
........
return "";
}
发送参数时使用接收方法的形参名发送多个参数。例:likes=game&likes=music&likes=book
♦ json类型参数
pom.xml文件里添加json坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
发送参数时选择类型body>raw>JSON
SpringMvcConfig中添加注解@EnableWebMvc实现json数据自动转换的支持
接收方法
@RequestMapping("/listParamForJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes)
{
........
return "";
}
3. 日期类型参数传递
spring默认支持字符串转换日期类型的支持格式为yyyy/mm/dd。如果发送的参数不是这样,接收方法需要加注解做转换
接收方法
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Data data, @DataTimeFormat(pattern="yyyy-mm-dd hh:mm:ss") Data data1)
{
......
return "";
}
根据不同格式,注解参数对应调整
4. 响应页面
接收方法
@RequestMapping("/toJumpPage")
public String toJumpPage()
{
return "page.jsp";
}
5. 响应文本数据
接收方法
@RequestMapping("/toText")
@ResponseBody
public String toText()
{
return "response text";
}
6. 响应json数据
@RequestMapping("/toJsonPOJO")
@ResponseBody
public String toJsonPOJO()
{
User user = new User();
user.setName("aaa");
user.setAge(12);
retutn user;
return "response text";
}