67,549
社区成员




根据Rest开发规范,增删改查里的修改功能,应该在controller类里使用@Put注解。@Post注解用来新增
但是苍穹外卖范例代码中,所有的“启用/停用”功能都使用了@Post注解。
所以小弟不太理解,为什么修改功能要用@Post。以下奉上范例代码
SetmealController.java 套餐响应类
/**
* 套餐起售停售
* @param status
* @param id
* @return
*/
@PostMapping("status/{status}")
@ApiOperation("套餐起售停售")
public Result startOrStop(@PathVariable Integer status, Long id) {
setmealService.startOrStop(status, id);
return Result.success();
}
SetmealService.java 业务接口
/**
* 修改套餐属性
* @param setmeal
*/
@AutoFill(value = OperationType.UPDATE)
void update(Setmeal setmeal);
SetmealServiceImpl.java 业务接口实现类
/**
* 套餐起售、停售
* @param status
* @param id
*/
@Override
public void startOrStop(Integer status, Long id) {
//起售套餐时,判断套餐内是否有停售菜品,有停售菜品提示"套餐内包含未启售菜品,无法启售"
if (status == StatusConstant.ENABLE) {
List<Dish> dishList = dishMapper.getBySetmealId(id);
if (dishList != null && dishList.size() > 0) {
dishList.forEach(dish -> {
if (dish.getStatus() == StatusConstant.DISABLE) throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ENABLE_FAILED);
});
}
}
Setmeal setmeal = Setmeal.builder()
.id(id)
.status(status)
.build();
setmealMapper.update(setmeal);
}
具体接口设计图如下
规范只是规范,@PUT @DELETE 在有些政务云服务器上会拦截,只会放行@POST和@Get请求,所以好多人写的时候,查询用Get,增、删、改都用Post
没什么吧,可能编写的人没注意规范。