通过request获得参数
1. controller方法
@RestController
public class GetDataController {
@RequestMapping("/getParamByRequest")
public String getParam(HttpServletRequest request) {
String userid = request.getParameter("userid");
String password = request.getParameter("password");
return "userid="+userid+", password="+password;
}
}
@RestController 暂时理解为该类的每个方法返回的都是字符串即可。后面会单独介绍。
2. postman请求测试
通过@RequestParam获得参数
1. controller方法
@RequestMapping("/getParamByName")
public String getParam2(String userid, @RequestParam("pwd") String password){
return "userid="+userid+", password="+password;
}
说明:
如果方法参数名称和请求的参数名称一致的情况下,是不用加@RequestParam的。如果不一致则需要写。
2. postman测试请求
通过POJO接收参数
1. 引入lombok
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
2. 定义POJO类
@Data
public class UserInfo {
private String userid;
private String username;
private Integer age;
/**
* 接收多个值
*/
private String[] hobby;
/**
* 这里如果需要用Date类型,则需要加@DateTimeFormat,
* 否则也可以用String进行接收
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthdate;
}
3. controller方法
@RequestMapping("/getParamByPojo")
public String getParam3(UserInfo userInfo) {
return userInfo.toString();
}
4. postman测试请求
接收List类型参数
1. 修改UserInfo类
@Data
public class UserInfo {
// 省略其他属性值
......
/**
* 喜欢的书籍
*/
List<BookInfo> books;
}
2. 添加BookInfo类
@Data
public class BookInfo {
/**
* 书籍id
*/
private String bookId;
/**
* 书籍名称
*/
private String bookName;
}
3. controller新加测试方法
@RequestMapping("/getParamByPojoWithList")
public String getParam4(UserInfo userInfo) {
return userInfo.toString();
}
4. postman发送测试数据
接收Map类型参数
1. 修改UserInfo类
@Data
public class UserInfo {
// 省略其他属性值
......
/**
* 喜欢的书籍Map形式
*/
Map<String, BookInfo> bookMap;
}
2. controller新加测试方法
@RequestMapping("/getParamByPojoWithMap")
public String getParam5(UserInfo userInfo) {
return userInfo.toString();
}
3. postman发送测试数据
接收json数据
1. 引入jackson
<!-- 请求和返回json数据时需要的包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.2</version>
</dependency>
2. controller增加方法
@RequestMapping("/getParamByPojoWithJson")
public String getParam6(@RequestBody UserInfo userInfo) {
return userInfo.toString();
}
3. postman发送测试数据
接收参数乱码问题
避免乱码的核心思想是,统一所有传输为utf-8编码。包括idea设置的文件编码:
1. GET方式乱码
Tomcat 8 及之后的版本,处理 get 请求的编码为 UTF-8。而tomcat7的URIEncoding 为 ISO-8859-1。如果传中文会出现乱码。假设你用的是tomcat7的话,那么需要修改$TOMCAT/conf/server.xml文件,修改如下内容:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
就是加上
URIEncoding="UTF-8"即可
2. post方式乱码
首先说明一点,在实际的测试中,post方式乱码仅仅出现在通过form表单提交的时候会出现,其他情况比如:@RequestBody传json或者虽然是post方式请求,但是请求值通过url传参的这两种情况都不会出现乱码。
处理乱码的方式,是在web.xml中配置一个全局字符串编码过滤器:
<!--Spring 中提供的字符编码过滤器-->
<filter>
<filter-name>encFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
代码地址
gitee.com/mayuanfei/s…下的springmvc02
记忆印记
- @RequestMapping可以放在类上或者方法上,而且是叠加路径的
- @RequestParam可以接受请求参数名和参数名不一致的情况;如果名称一致可以不用写
- @RequestBody接收json数据时,引入jackson
- form表单采用post提交数据乱码时,配置字符编码过滤器可以解决