当前端发给后端的请求参数是JSON时,如下图,
想用自动封装需要在要封装的类前面加个@RequestBody注解。如路径为group的封装SpecGroup类。
Controller的代码:
@PostMapping("group")
public ResponseEntity<Void> saveGroup(@RequestBody SpecGroup specGroup){
specificationService.saveGroup(specGroup);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
Service的代码
@Transactional
public void saveGroup(SpecGroup specGroup) {
groupMapper.insert(specGroup);
}
但是下图的Brand brand类封装时,在Brand brand前面如果加上了@RequestBody注解反而测试错误,封装Brand类失败。这是因为此时前端发过去的不是JSON而是表单数据,如下图:
Controller的代码
@PostMapping
public ResponseEntity<Void> saveBrand(Brand brand, @RequestParam("cids") List<Long> cids){
brandService.saveBrand(brand, cids);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
Service的代码
@Transactional
public void saveBrand(Brand brand, List<Long> cids) {
// 先新增brand
brandMapper.insert(brand);
// 在新增中间表
for(long cid : cids) {
brandMapper.insertBrandAndCategory(cid, brand.getId());
}
}
总结:前端发的参数是表单数据则不用加@RequestBody,前端发的参数是JSON数据则必须加@RequestBody才能封装成功。