新增品牌后台代
后臺(tái)實(shí)現(xiàn)新增
controller
還是一樣,先分析四個(gè)內(nèi)容:
-
請(qǐng)求方式:POST
-
請(qǐng)求路徑:/brand
-
請(qǐng)求參數(shù):brand對(duì)象,外加商品分類的id數(shù)組cids
-
返回值:無(wú),只需要響應(yīng)狀態(tài)碼
代碼:
/*** 新增品牌* @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
這里要注意,我們不僅要新增品牌,還要維護(hù)品牌和商品分類的中間表。
/*** 新增品牌** @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());});}這里調(diào)用了brandMapper中的一個(gè)自定義方法,來(lái)實(shí)現(xiàn)中間表的數(shù)據(jù)新增
Mapper
通用Mapper只能處理單表,也就是Brand的數(shù)據(jù),因此我們手動(dòng)編寫一個(gè)方法及sql,實(shí)現(xiàn)中間表的新增:
public interface BrandMapper extends Mapper<Brand> {/*** 新增商品分類和品牌中間表數(shù)據(jù)* @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
原因分析
我們填寫表單并提交,發(fā)現(xiàn)報(bào)錯(cuò)了。查看控制臺(tái)的請(qǐng)求詳情:
發(fā)現(xiàn)請(qǐng)求的數(shù)據(jù)格式是JSON格式。
原因分析:
axios處理請(qǐng)求體的原則會(huì)根據(jù)請(qǐng)求數(shù)據(jù)的格式來(lái)定:
-
如果請(qǐng)求體是對(duì)象:會(huì)轉(zhuǎn)為json發(fā)送
-
如果請(qǐng)求體是String:會(huì)作為普通表單請(qǐng)求發(fā)送,但需要我們自己保證String的格式是鍵值對(duì)。
如:name=jack&age=12
總結(jié)