@PathVariable,@RequestParam,@RequestBody小结

本文详细解析了SpringMVC中三种主要的参数接收方式:@PathVariable用于接收URL路径中的参数,@RequestParam用于获取URL查询字符串中的参数,而@RequestBody则用于解析请求体中的JSON数据。

1.@PathVariable
当从前端传输的URL是 http://路径/参数 的时候要使用@PathVariable注解接收参数
在这里插入图片描述
代码样式

@GetMapping("groups/{cid}")
    public ResponseEntity<List<SpecGroup>> queryGroupsByCid(@PathVariable("cid")Long cid){
        List<SpecGroup> groups=this.specificationService.queryGroupsByCid(cid);
        if (CollectionUtils.isEmpty(groups)){
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(groups);
    }

@RequestParam
当从前端传输的URL是http://路径/映射地址?参数=&参数=&的样式
前端数据URL使用@RequestParam注解
代码如下

@GetMapping("page")
    public ResponseEntity<PageResult<Brand>> queryBrandsByPage(

            @RequestParam(value = "key", required = false)String key,
            @RequestParam(value = "page", defaultValue = "1")Integer page,
            @RequestParam(value = "rows", defaultValue = "5")Integer rows,
            @RequestParam(value = "sortBy", required = false)String sortBy,
            @RequestParam(value = "desc", required = false)Boolean desc

    ){
        PageResult<Brand> pageResult=this.brandService.queryBrandsByPage(key,page,rows,sortBy,desc);

        if (CollectionUtils.isEmpty(pageResult.getItems())){
            return ResponseEntity.notFound().build();
        }

        return ResponseEntity.ok(pageResult);
    }`

3.@RequestBody
当从前端传输的数据是一组json字符串是要使用@RequestBody
在这里插入图片描述
代码如下

@PostMapping("group")
    public ResponseEntity<Void> addGroupsByCid(@RequestBody SpecGroup specGroup){
        //进行cid校验
        if (Objects.isNull(specGroup.getCid())){
            return ResponseEntity.badRequest().build();
        }
        this.specificationService.addGroupsByCid(specGroup);
        return ResponseEntity.ok(null);
    }
你已经提供了一个接收 JSON 的类结构,以及一个用于数据库操作的 `StockMaterial` 类。现在你想实现 Spring Boot + MyBatis-Plus 的 CRUD 操作。 --- ### ✅ 目标 - 实现 `StockMaterial` 实体类的 **增删改查(CRUD)** - 使用 **Spring Boot + MyBatis-Plus** - 接收你提供的 JSON 数据,并保存到 `stock_material` 表中 --- ### ✅ 1. 创建 Controller ```java @RestController @RequestMapping("/stock-material") public class StockMaterialController { @Autowired private IStockMaterialService stockMaterialService; // 保存领料单及明细 @PostMapping("/save") public ResponseEntity<String> saveStockMaterial(@RequestBody StockMaterialRequest request) { try { stockMaterialService.saveStockMaterial(request); return ResponseEntity.ok("保存成功"); } catch (Exception e) { return ResponseEntity.status(500).body("保存失败: " + e.getMessage()); } } // 查询所有 @GetMapping("/list") public ResponseEntity<List<StockMaterial>> getAllStockMaterials() { return ResponseEntity.ok(stockMaterialService.list()); } // 根据领料单号查询 @GetMapping("/list-by-picking") public ResponseEntity<List<StockMaterial>> getByPickingNo(@RequestParam String pickingNo) { return ResponseEntity.ok(stockMaterialService.list(new QueryWrapper<StockMaterial>().eq("picking_no", pickingNo))); } // 删除 @DeleteMapping("/delete/{id}") public ResponseEntity<String> deleteById(@PathVariable Long id) { if (stockMaterialService.removeById(id)) { return ResponseEntity.ok("删除成功"); } return ResponseEntity.status(500).body("删除失败"); } } ``` --- ### ✅ 2. 创建 Service 接口和实现类 #### Service 接口 ```java public interface IStockMaterialService extends IService<StockMaterial> { void saveStockMaterial(StockMaterialRequest request); } ``` #### Service 实现 ```java @Service public class StockMaterialServiceImpl extends ServiceImpl<StockMaterialMapper, StockMaterial> implements IStockMaterialService { @Override public void saveStockMaterial(StockMaterialRequest request) { for (StockMaterialRequest.Item item : request.getItems()) { StockMaterial stockMaterial = new StockMaterial(); stockMaterial.setMaterial_code(item.getMaterialNo()); stockMaterial.setMaterial_num(item.getQuantity()); stockMaterial.setContainer_code(request.getCarrierNo()); // 假设容器号等于 carrierNo stockMaterial.setPicking_no(request.getPickingNo()); stockMaterial.setWork_order_no(request.getWorkOrderNo()); stockMaterial.setLine_no(item.getLineNo()); this.save(stockMaterial); } } } ``` --- ### ✅ 3. 创建 Request 类用于接收 JSON ```java @Data public class StockMaterialRequest { private String pickingNo; private String workOrderNo; private String carrierNo; private String bindPoint; private Integer isBinding; private List<Item> items; @Data public static class Item { private String lineNo; private String materialNo; private Integer quantity; } } ``` --- ### ✅ 4. Mapper 接口 ```java public interface StockMaterialMapper extends BaseMapper<StockMaterial> { } ``` --- ### ✅ 5. 实体类(你已提供) ```java @TableName(value = "stock_material") @Data public class StockMaterial { @TableId(value = "id", type = IdType.AUTO) private Long id; @TableField(value = "material_code") private String material_code; @TableField(value = "material_num") private Integer material_num; @TableField(value = "container_code") private String container_code; @TableField(value = "picking_no") private String picking_no; @TableField(value = "work_order_no") private String work_order_no; @TableField(value = "line_no") private String line_no; @TableField(value = "create_time") private Date create_time; } ``` --- ### ✅ 6. 配置文件 `application.yml` ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml configuration: mapUnderscoreToCamelCase: true ``` --- ### ✅ 7. 启动类 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` --- ### ✅ 示例请求 JSON ```json { "pickingNo": "PK20230001", "workOrderNo": "WO20230001", "carrierNo": "CR20230001", "bindPoint": "B-05", "isBinding": 1, "items": [ { "lineNo": "001", "materialNo": "MAT20230001", "quantity": 100 } ] } ``` --- ### ✅ 小结 - 实现了 Spring Boot + MyBatis-Plus 的 CRUD 操作 - 可以接收你提供的 JSON 结构并插入到数据库 - 使用了 `IService` 和 `BaseMapper` 快速开发 - 提供了 RESTful API:保存、查询、删除等 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值