新增品牌后台代
后臺實現新增
controller
還是一樣,先分析四個內容:
-
請求方式:POST
-
請求路徑:/brand
-
請求參數:brand對象,外加商品分類的id數組cids
-
返回值:無,只需要響應狀態碼
代碼:
/*** 新增品牌* @param brand* @param cids*/@PostMappingpublic ResponseEntity<Void> saveBrand(Brand brand, @RequestParam("cids") List<Long> cids){this.brandService.saveBrand(brand, cids);return ResponseEntity.status(HttpStatus.CREATED).build();}Service
這里要注意,我們不僅要新增品牌,還要維護品牌和商品分類的中間表。
/*** 新增品牌** @param brand* @param cids*/@Transactionalpublic void saveBrand(Brand brand, List<Long> cids) {// 先新增brandthis.brandMapper.insertSelective(brand);// 在新增中間表cids.forEach(cid -> {this.brandMapper.insertCategoryAndBrand(cid, brand.getId());});}這里調用了brandMapper中的一個自定義方法,來實現中間表的數據新增
Mapper
通用Mapper只能處理單表,也就是Brand的數據,因此我們手動編寫一個方法及sql,實現中間表的新增:
public interface BrandMapper extends Mapper<Brand> {/*** 新增商品分類和品牌中間表數據* @param cid 商品分類id* @param bid 品牌id* @return*/@Insert("INSERT INTO tb_category_brand(category_id, brand_id) VALUES (#{cid},#{bid})")int insertBrandAndCategory(@Param("cid") Long cid, @Param("bid") Long bid); }解決400
原因分析
我們填寫表單并提交,發現報錯了。查看控制臺的請求詳情:
發現請求的數據格式是JSON格式。
原因分析:
axios處理請求體的原則會根據請求數據的格式來定:
-
如果請求體是對象:會轉為json發送
-
如果請求體是String:會作為普通表單請求發送,但需要我們自己保證String的格式是鍵值對。
如:name=jack&age=12
總結