@RestController @Controller
@RestController = @Controller + @ResponseBody
@ResponseBody 响应数据,作用是将方法返回值直接响应,如果返回值类型是实体对象/集合,将会转换为JSON格式响应;
@Conroller 在这里涉及到三层架构的一些东西;
三层架构分为:数据访问(Dao),逻辑处理(Service),接收请求,响应数据(Controller)
使用@Controller 结合@Autowired 可以直接调用调用Service 层也就是逻辑处理的类,降低耦合(耦合:衡量软件中各层/模块之间的依赖、关联程度。)
而我们在码代码的时候,追求的是高内聚低耦合(内聚:软件各个功能模块内部的功能联系)
@RequestBody @RequestParam
两者都是用来接收前端发来的数据,JSON格式的数据就需要@RequestBody 来接收(JSON参数:JSON数据键名与形参对象属性名相同,定义Pojo类型形参即可接收,需要使用@RequestBody标识),但是@RequestBody 只能接收一个,如果有多个那么就得使用@RequestParam。
数组参数和集合参数:
数组参数:请求参数名与形参数组名称相同且请求数为多个,定义数组类型形参即可接收参数。
集合参数:请求参数名与形参集合名称相同且请求参数为多个,@RequestParam绑定参数关系。
如下,批量删除,就需要使用@RequestParam 来接收。
/**
* 批量删除套餐
* @param ids
* @return
*/
@DeleteMapping
@ApiOperation("批量删除套餐")
//什么时候使用@ReqBody,什么用@RequParam
public Result delete(@RequestParam List<Long> ids){
setmealService.deleteBatch(ids);
return Result.success();
}
如下,前端就传来一个JSON格式的数据,我们只需要加上@RequestBody 就行了。
/**
* 新增套餐
* @param setmealDTO
* @return
*/
@PostMapping
@ApiOperation("新增套餐")
public Result save(@RequestBody SetmealDTO setmealDTO){
setmealService.saveWithDish(setmealDTO);
return Result.success();
}
@PathVariable
路径参数:通过请求URl直接传递参数,使用{...}来标识路径参数,需要使用@PathVariable 获取路径参数。
/**
* 根据id查询套餐,用于修改页面回显数据
* @param id
* @return
*/
@GetMapping("/{id}")
@ApiOperation("根据id查询套餐")
public Result<SetmealVO> getById(@PathVariable Long id){
SetmealVO setmealVO = setmealService.getByIdWithDish(id);
return Result.success(setmealVO);
}