Spring @Mapping 7种在电子商务平台商品管理的使用案例
一个电子商务平台的商品管理功能。这个平台需要能够列出商品、创建新商品、更新现有商品、删除商品以及部分更新商品信息。可以通过@RequestMapping
、@GetMapping
、@PostMapping
、PutMapping
、DeleteMapping
和 PatchMapping
注解来涵盖不同的 HTTP 方法和使用场景。
注解结构设计
URL API
电子商务平台商品的API,需要提供商品和订单的管理功能。
@GetMapping("/api/products")
用于获取商品列表。@PostMapping("/api/products")
用于添加新商品。@PutMapping("/api/products/{id}")
用于更新特定商品的详细信息。@DeleteMapping("/api/products/{id}")
用于删除特定商品。@GetMapping("/api/orders")
用于获取订单列表。@PostMapping("/api/orders")
用于创建新订单。@PatchMapping("/api/orders/{id}")
用于部分更新订单状态,如从 "pending" 改为 "shipped"。
这些注解的使用确保了 API 的 RESTful 风格,每个方法对应一种资源操作,使得 API 更加直观和易于使用。通过这种方式,你可以构建一个清晰、一致且易于维护的 Web API
案例:电子商务平台的商品管理
1. 控制器类定义
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/products")
public class ProductController {
private final ProductService productService = new ProductService();
// 获取所有商品的列表
@GetMapping
public List<Product> getAllProducts() {
return productService.findAllProducts();
}
// 创建新商品
@PostMapping
public Product createProduct(@RequestBody Product product) {
return productService.createProduct(product);
}
// 根据商品ID获取商品详情
@GetMapping("/{id}")
public Product getProductById(@PathVariable Long id) {
return productService.getProductById(id);
}
// 更新商品信息
@PutMapping("/{id}")
public Product updateProduct(@PathVariable Long id, @RequestBody Product updatedProduct) {
return productService.updateProduct(id, updatedProduct);
}
// 删除商品
@DeleteMapping("/{id}")
public ResponseEntity<?> deleteProduct(@PathVariable Long id) {
productService.deleteProduct(id);
return ResponseEntity.ok().build();
}
// 部分更新商品信息
@PatchMapping("/{id}")
public Product patchProduct(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
return productService.patchProduct(id, updates);
}
}
2. 服务层实现
import org.springframework.stereotype.Service;
@Service
public class ProductService {
private final ProductRepository productRepository = new ProductRepository();
public List<Product> findAllProducts() {
return productRepository.findAll();
}
public Product createProduct(Product product) {
return productRepository.save(product);
}
public Product getProductById(Long id) {
return productRepository.findById(id).orElse(null);
}
public Product updateProduct(Long id, Product updatedProduct) {
Product product = getProductById(id);
if (product != null) {
// 更新商品字段
product.setName(updatedProduct.getName());
product.setDescription(updatedProduct.getDescription());
product.setPrice(updatedProduct.getPrice());
return productRepository.save(product);
}
return null;
}
public void deleteProduct(Long id) {
Product product = getProductById(id);
if (product != null) {
productRepository.delete(product);
}
}
public Product patchProduct(Long id, Map<String, Object> updates) {
Product product = getProductById(id);
if (product != null) {
updates.forEach((key, value) -> {
switch (key) -> {
case "name" -> product.setName((String) value);
case "description" -> product.setDescription((String) value);
case "price" -> product.setPrice((Double) value);
}
});
return productRepository.save(product);
}
return null;
}
}
3. 存储层实现
import org.springframework.data.jpa.repository.JpaRepository;
public interface ProductRepository extends JpaRepository<Product, Long> {
// 这里可以定义自定义的数据库操作
}
4. 商品实体类
import javax.persistence.*;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
private Double price;
// 标准的 getter 和 setter
}
注解属性说明
@RequestMapping
注解属性作用解释:
-
value:
- 类型:
String[]
- 作用:指定请求的基础路径。可以是一个路径或多个路径的数组。
- 类型:
-
path:
- 类型:
String[]
- 作用:与
value
相同,用于指定请求的路径。path
是value
的别名,两者不能同时使用。
- 类型:
-
method:
- 类型:
RequestMethod[]
- 作用:指定请求的 HTTP 方法。例如,
RequestMethod.GET
、RequestMethod.POST
等。如果没有指定,将匹配所有方法。
- 类型:
-
params:
- 类型:
String[]
- 作用:指定请求必须满足的查询参数条件。例如,
"params[] = {"param1", "param2"}
。
- 类型:
-
headers:
- 类型:
String[]
- 作用:指定请求必须满足的 HTTP 头部条件。例如,
"headers[] = {"header1=value1", "header2=value2"}
。
- 类型:
-
consumes:
- 类型:
String[]
- 作用:指定请求正文(payload)支持的媒体类型。例如,
"application/json"
、"application/xml"
等。
- 类型:
-
produces:
- 类型:
String[]
- 作用:指定控制器方法支持返回的媒体类型。例如,
"application/json"
、"text/html"
等。
- 类型:
-
name:
- 类型:
String
- 作用:为映射定义一个名称,可用于文档生成或引用。
- 类型:
总结:
- 通过使用
@RequestMapping
、@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
和@PatchMapping
注解,这个控制器类提供了一个完整的商品管理功能,包括商品的增删改查和部分更新。 - 这种方法的组织方式使得 API 直观且易于理解,每个 HTTP 方法对应一种资源操作。
- 它支持 RESTful API 设计的最佳实践,提供了清晰的资源操作语义。
转载自:https://juejin.cn/post/7383017171179634742