Postman接口测试工具
Postman
Postman 是一款强大的 API 开发和测试工具,它能够帮助开发人员和测试人员高效地与各种 API 进行交互、发送请求并分析响应。
API测试:在编写Java代码之前,可以先使用Postman构建和测试API请求,确保API端点的正确性;测试不同类型的HTTP请求(GET, POST, PUT, DELETE等)和参数;检查API的响应状态码、响应头和响应体。
模拟客户端:模拟客户端发送请求到Java后端服务,帮助开发者在不编写前端代码的情况下测试后端逻辑。
下载地址:https://www.postman.com/downloads/
客户端与服务器之间几种不同的参数传递方式
- 查询字符串(Query String):
- 通过URL中的
?
符号传递参数,参数以key=value
的形式出现,多个参数之间用&
连接。 - 例如:
http://example.com/api/data?id=123&name=John
- 在Postman中,可以在
Params
部分添加查询字符串参数。
- 通过URL中的
- 请求体(Request Body):
- 在发送POST、PUT、PATCH等请求时,可以在请求体中传递参数。
- 参数可以以多种格式发送,常见的有:
- JSON格式:
{"id": 123, "name": "John"}
- XML格式:
<data><id>123</id><name>John</name></data>
- 表单数据(application/x-www-form-urlencoded):
id=123&name=John
- 表单数据(multipart/form-data):用于上传文件等二进制数据。
- JSON格式:
- Postman支持多种请求体格式,包括:
- raw(可以发送JSON、XML、Text等格式的数据)
- form-data(用于发送表单数据,包括文件上传)
- x-www-form-urlencoded(用于发送URL编码的表单数据)
- binary(用于发送二进制文件)
- 路由参数(Route Parameters):
- 在RESTful风格的API中,参数可以作为URL的一部分传递。
- 例如:
http://example.com/api/data/123
,其中123
是参数,通常用于表示资源的ID。 - 在Postman的URL中,可以直接将参数作为URL的一部分,例如
http://example.com/api/data/{param}
,然后在“Params”或“Pre-request Script”中为这些参数提供值。
- 请求头(Request Headers):
- 请求头可以用来传递一些元数据,如认证令牌(Token)、内容类型(Content-Type)等。
- 例如:
Authorization: Bearer <token>
- Cookie:
- Cookie通常用于存储用户会话信息,可以在请求中自动发送到服务器。
- 例如:
Cookie: name=John; sessionid=abc123
使用场景实例
根据商品分类ID(categoryId) 和 搜索关键字(query) 查询商品
实体类定义如下
@Data
@TableName("product")
public class Product implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Integer id; // 商品 ID
private String name; // 商品名称
private String description; // 商品描述
private double price; // 商品价格
private double price2; // 商品原价格
private Integer stock; // 商品库存
private Integer sales; // 商品销量
private String imageUrl; // 商品主图 URL
private Integer categoryId; // 商品分类 ID
private String createdAt; // 创建时间
private String updatedAt; // 更新时间
}
这里使用 MybatisPlus,注意开启驼峰映射,让 MyBatis-Plus 自动处理数据库字段名与 Java 实体类属性名之间的映射关系。
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 开启驼峰映射
将数据库中的下划线命名 image_url 转换为 Java 对象的驼峰命名 imageUrl
其余核心代码如下:
// 数据持久层 ProductMapper
public interface ProductMapper extends BaseMapper<Product> {}
// 业务层 ProductService 相关方法
public interface ProductService extends IService<Product> {
public List<Product> searchProducts(Integer categoryId,String keyword);
}
// Service 实现类相关方法
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
implements ProductService {
@Resource
private ProductMapper productMapper;
@Override
public List<Product> searchProducts(Integer categoryId,String keyword) {
QueryWrapper<Product> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("category_id", categoryId);
queryWrapper.like("name", keyword);
return productMapper.selectList(queryWrapper);
}
}
以 categoryId = 2
,query = 游戏
举例
路由参数传递
@RestController
@RequestMapping("/test")
@CrossOrigin // 跨域请求
public class TestController {
@Resource
private ProductService productService;
@GetMapping("/search1/{categoryId}/{query}")
public ResultJSON searchProducts1(
@PathVariable Integer categoryId
, @PathVariable String query) {
List<Product> products = productService.searchProducts(categoryId,query);
return ResultJSON.success(products);
}
}
GET http://localhost:8080/test/search1/2/游戏
简单参数传递
@GetMapping("/search2")
public ResultJSON searchProducts2(Integer categoryId, String query) {
List<Product> products = productService.searchProducts(categoryId,query);
return ResultJSON.success(products);
}
GET http://localhost:8080/test/search2?categoryId=2&query=游戏
@RequestParam
设置参数别名和参数是否必须
表单参数传递
@PostMapping("/search22")
public ResultJSON searchProducts22(Integer categoryId, String query) {
List<Product> products = productService.searchProducts(categoryId,query);
return ResultJSON.success(products);
}
POST http://localhost:8080/test/search22
categoryId 2
query 游戏
实体对象传递
@Data
public class SearchPro {
private Integer categoryId;
private String query;
}
@PostMapping("/search3")
public ResultJSON searchProducts3(@RequestBody SearchPro pro) {
List<Product> products = productService.searchProducts(pro.getCategoryId(),pro.getQuery());
return ResultJSON.success(products);
}
POST http://localhost:8080/test/search3
Content-Type === application/json
将 Content-Type
头部设置为 application/json
以指示发送的是 JSON 格式数据
{
"categoryId": 2,
"query": "游戏"
}
使用
@RequestBody
注解来接收 JSON 数据。