Transaction在Controller层的探索
一般开发中事务要求我们放在Service层,可是有些情况,我们可能会要求放在Controller层,你有没有碰到过这样的需求呢?那么放到Controller层事务会生效吗?会产生什么问题呢?下面一起来看看
I、透过现象看本质
第一种情况
Controller层代码如下
@RestController @RequestMapping("/city") public class CityControllerImpl implements CityController { @Autowired private CityService cityService; @Override @RequestMapping(value = "getCity",method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @Transcational public BaseResult<City> getCity(@RequestParam("id") Integer id) { City one = cityService.getOne(id); BaseResult<City> baseResult=new BaseResult<>(); baseResult.setData(one); return baseResult; } }
运行结果
对的,你没有看错,当Transactional加载Controller层时出现404异常
第二种情况
Controller层代码如下
@RestController @RequestMapping("/city") public class CityControllerImpl { @Autowired private CityService cityService; @RequestMapping(value = "getCity",method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_UTF8_VALUE) @Transactional public BaseResult<City> getCity(@RequestParam("id") Integer id) { City one = cityService.getOne(id); BaseResult<City> baseResult=new BaseResult<>(); baseResult.setData(one); return baseResult; } }