Spring @Mapping 7种在电子商务平台商品管理的使用案例

一个电子商务平台的商品管理功能。这个平台需要能够列出商品、创建新商品、更新现有商品、删除商品以及部分更新商品信息。可以通过@RequestMapping@GetMapping@PostMappingPutMappingDeleteMappingPatchMapping 注解来涵盖不同的 HTTP 方法和使用场景。

注解结构设计

image.png

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 注解属性作用解释:

  1. value:

    • 类型:String[]
    • 作用:指定请求的基础路径。可以是一个路径或多个路径的数组。
  2. path:

    • 类型:String[]
    • 作用:与 value 相同,用于指定请求的路径。path 是 value 的别名,两者不能同时使用。
  3. method:

    • 类型:RequestMethod[]
    • 作用:指定请求的 HTTP 方法。例如,RequestMethod.GETRequestMethod.POST 等。如果没有指定,将匹配所有方法。
  4. params:

    • 类型:String[]
    • 作用:指定请求必须满足的查询参数条件。例如,"params[] = {"param1", "param2"}
  5. headers:

    • 类型:String[]
    • 作用:指定请求必须满足的 HTTP 头部条件。例如,"headers[] = {"header1=value1", "header2=value2"}
  6. consumes:

    • 类型:String[]
    • 作用:指定请求正文(payload)支持的媒体类型。例如,"application/json""application/xml" 等。
  7. produces:

    • 类型:String[]
    • 作用:指定控制器方法支持返回的媒体类型。例如,"application/json""text/html" 等。
  8. name:

    • 类型:String
    • 作用:为映射定义一个名称,可用于文档生成或引用。

总结:

  • 通过使用 @RequestMapping@GetMapping@PostMapping@PutMapping@DeleteMapping 和 @PatchMapping 注解,这个控制器类提供了一个完整的商品管理功能,包括商品的增删改查和部分更新。
  • 这种方法的组织方式使得 API 直观且易于理解,每个 HTTP 方法对应一种资源操作。
  • 它支持 RESTful API 设计的最佳实践,提供了清晰的资源操作语义。
  • 33
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
@Mapping注解在Spring MVC框架中有着广泛的应用,它可以用于将HTTP请求映射到处理程序类或处理程序方法上。具体的使用方式和说明如下: 1. 用于类级别 在类级别上使用@Mapping注解表示该类中所有方法的映射路径的公共前缀。例如: ``` @Controller @RequestMapping("/user") public class UserController { // ... } ``` 上述代码表示UserController类中所有方法的映射路径都以/user为前缀。 2. 用于方法级别 在方法级别上使用@Mapping注解表示该方法的具体映射路径。例如: ``` @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/list") public String listUsers(Model model) { // ... } } ``` 上述代码表示listUsers方法的映射路径是/user/list。 3. 指定HTTP请求方法类型 @Mapping注解可以指定HTTP请求的方法类型,例如: ``` @RequestMapping(value = "/users", method = RequestMethod.GET) public List<User> getUsers() { // ... } ``` 上述代码表示getUsers方法只接受GET请求。 4. 指定请求参数和请求头信息 @Mapping注解可以指定HTTP请求的参数和头信息,例如: ``` @RequestMapping(value = "/user", params = "id=1", headers = "content-type=text/plain") public String getUser() { // ... } ``` 上述代码表示getUser方法只接受id参数值为1,content-type头信息为text/plain的HTTP请求。 5. 支持Ant风格的URL路径匹配 @Mapping注解支持Ant风格的URL路径匹配,例如: ``` @RequestMapping("/user/*") public String handleRequest(HttpServletRequest request, HttpServletResponse response) { // ... } ``` 上述代码表示匹配以/user/开头的所有URL路径。 总之,@Mapping注解是Spring MVC框架中非常重要的注解,它可以帮助我们将HTTP请求映射到对应的处理程序方法上,从而实现请求处理和响应的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solomon_肖哥弹架构

你的欣赏就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值