【spring】spring boot中使用@EnableTransactionManagement 以后,spring mvc接收前台ajax的post方法传过来的参数,使用@RequestBody接收不到参数
在启动类上添加了注解:
@EnableTransactionManagement,
postMan测试接口,以这种方式传递参数:
测试结果:
接收不到参数
问题解决:
原因:是因为 这个项目中的Controller层 其实是有一层接口层,一层实现层。
其实controller层不应该有接口层,而直接就是 实现层。
像上面这种有接口层,又有实现层的设计,会导致在启动类添加了@EnableTransactionManagement注解之后,导致
接口层:
package com.pisen.cloud.luna.ms.goods.api; import com.pisen.cloud.luna.core.result.AjaxResult; import com.pisen.cloud.luna.core.result.PageResult; import com.pisen.cloud.luna.ms.goods.base.domain.GoodsAid; import com.pisen.cloud.luna.ms.goods.base.domain.GoodsAidLog; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @RequestMapping("/ten/goodsAid") public interface ITenGoodsAidApi extends ICRUDCommonApi<GoodsAid> { /** * 售后服务的更新操作 * * 注意地址!!!!!!是 updated * * 服务未启用-->可以修改商品分类和 服务信息 * 服务已启用-->不可以修改商品分类 可以修改服务信息 * * @param entity * @return */ @RequestMapping(value = "/updated",method = RequestMethod.POST) AjaxResult<GoodsAid> updated(GoodsAid entity); /** * 启用售后辅助服务配置 * * 启用以后不能再禁用或者删除 * * 所以禁用操作不提供 * @param aid * @return */ @RequestMapping(value = "/enable",method = RequestMethod.POST) AjaxResult<String> enable(GoodsAid aid); /** * 分页查询 售后服务日志 * * @param entity * 实例对象 * @return 标准返回对象 */ @RequestMapping(value = "/log/pageFind", method = RequestMethod.GET) PageResult<GoodsAidLog> pageFind(@RequestBody GoodsAidLog entity) ; /** * 新增实例 售后服务日志 * * @param entity * 实例对象 * @return 标准返回对象 */ @RequestMapping(value = "/log/insert", method = RequestMethod.POST) public AjaxResult<GoodsAidLog> insert(@RequestBody GoodsAidLog entity); }
实现层:
package com.pisen.cloud.luna.ms.goods.api.impl; import com.pisen.cloud.luna.core.reqmodal.RequestData; import com.pisen.cloud.luna.core.result.AjaxResult; import com.pisen.cloud.luna.core.result.LunaResultBean; import com.pisen.cloud.luna.core.result.PageResult; import com.pisen.cloud.luna.core.utils.LunaIDUtil; import com.pisen.cloud.luna.core.utils.TenementUser; import com.pisen.cloud.luna.ms.goods.api.ITenGoodsAidApi; import com.pisen.cloud.luna.ms.goods.base.domain.GoodsAid; import com.pisen.cloud.luna.ms.goods.base.domain.GoodsAidLog; import com.pisen.cloud.luna.ms.goods.base.domain.GoodsBindConfigMapping; import com.pisen.cloud.luna.ms.goods.base.service.GoodsAidService; import com.pisen.cloud.luna.ms.goods.base.service.GoodsBindConfigMappingService; import org.aspectj.weaver.loadtime.Aj; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class TenGoodsAidApiImpl implements ITenGoodsAidApi { @Autowired GoodsAidService service; @Autowired GoodsBindConfigMappingService bindConfigMappingService; /** * 新增 售后辅助服务 * * 默认新增服务是禁用的 * * serviceEnter 保存 即以 常量,常量 字符串保存即可 * 例如: 1,2,3,4 或 1,3,5 * @param entity * 实例对象 * @return */ @Override public AjaxResult<GoodsAid> insert(@RequestBody GoodsAid entity) { LunaResultBean.checkField(entity,"name","floor","goodsTypeUidList", "serviceEnter","outerUrl","urlContext"); AjaxResult<GoodsAid> res = new AjaxResult<>(); //初始化 对象 entity.initInsertData(); //如果全局字段传入 则采用传入值 否则 默认非全局 entity.setGlobal(entity.getGlobal() == null ? GoodsAid.NOT_GLOBAL : entity.getGlobal()); entity.setUid(LunaIDUtil.uid()); GoodsAid save = service.save(entity); if (save != null){ res.initTrue(save); }else { res.initFalse("保存失败",LunaResultBean.ERROR_BUSINESS); } return res; } @Override public AjaxResult<GoodsAid> update(GoodsAid entity) { return null; } /** * 售后服务的更新操作 * * 注意地址!!!!!!是 updated * * 服务未启用-->可以修改商品分类和 服务信息 * 服务已启用-->不可以修改商品分类 可以修改服务信息 * * @param entity * @return */ @Override public AjaxResult<GoodsAid> updated(@RequestBody GoodsAid entity) { LunaResultBean.checkField(entity,"uid","name","floor","goodsTypeUidList","serviceEnter","outerUrl","urlContext"); AjaxResult<GoodsAid> res = new AjaxResult<>(); List<String> goodsTypeUid = entity.getGoodsTypeUidList(); GoodsAid old = service.findByUid(entity); if (old != null){ String uid = entity.getUid(); Integer enabled = old.getEnabled(); //验证标志 标志是否禁用状态 或 启用状态下 商品分类一致 boolean flag = false; if (GoodsAid.CONFIG_DISENABLE == enabled){ //服务 禁用状态 flag = true; }else { //服务 启用状态 //查找售后服务绑定的原商品分类 List<String> oldTypeList = service.findGoodsTypeUidsByConfigUid(uid); if (oldTypeList != null){ if (bindConfigMappingService.chechDiff(oldTypeList,goodsTypeUid)){ flag = true; }else { res.initFalse("服务已经启用,不能更改商品分类",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("原售后服务未绑定任何商品分类,属于非法服务",LunaResultBean.ERROR_BUSINESS); } } //验证通过 if (flag){ entity.initUpdateData(); GoodsAid update = service.update(entity); if (update != null){ res.initTrue(update); }else { res.initFalse("更新失败",LunaResultBean.ERROR_BUSINESS); } } }else { res.initFalse("售后服务不存在",LunaResultBean.ERROR_BUSINESS); } return res; } /** *删除 售后辅助服务 * * 注意 启用以后的服务就不能禁用或删除了 * 启用之前的服务 可以删除 * @param entity * 实例对象 * @return */ @Override public AjaxResult<GoodsAid> delete(@RequestBody GoodsAid entity) { LunaResultBean.checkField(entity,"uid"); AjaxResult<GoodsAid> res = new AjaxResult<>(); //当前租户 TenementUser tenementUser = RequestData.TENEMENT_USER.get(); String tenementId = tenementUser.getTenementId(); GoodsAid old = service.findByUid(entity); if (old != null){ if (tenementId.equals(old.getTenementId())){ if (old.getEnabled() == GoodsAid.CONFIG_DISENABLE){ boolean flag = service.delete(entity); if (flag){ res.initTrue(entity); }else { res.initFalse("刪除失敗",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("售后服务已启用,不能刪除",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("非法操作",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("售后服务不存在",LunaResultBean.ERROR_BUSINESS); } return res; } /** * 分页查询 【售后辅助服务】 * * @param entity * 实例对象 * @return 标准返回对象 */ @Override public PageResult<GoodsAid> pageFind(GoodsAid entity) { //当前租户 TenementUser tenementUser = RequestData.TENEMENT_USER.get(); String tenementId = tenementUser.getTenementId(); entity.setTenementId(tenementId); Page<GoodsAid> page = service.pageFind(entity); PageResult<GoodsAid> res = new PageResult<>(); res.initTrue(page.getTotalElements(),page.getContent()); return res; } /** * 根据 售后字段 获取信息 * @param entity * 实例对象 * @return */ @Override public AjaxResult<List<GoodsAid>> find(GoodsAid entity) { return null; } /** * 启用接口 * 注意 启用以后 就不能禁用了 * * 所以没有禁用接口和禁用操作 * @param entity * @return */ @Override public AjaxResult<String> enable(@RequestBody GoodsAid entity) { LunaResultBean.checkField(entity,"uid"); AjaxResult<String> res = new AjaxResult<>(); //当前租户 TenementUser tenementUser = RequestData.TENEMENT_USER.get(); String tenementId = tenementUser.getTenementId(); GoodsAid old = service.findByUid(entity); if (old != null){ if (tenementId.equals(old.getTenementId())){ Integer enabled = old.getEnabled(); if (enabled == GoodsAid.CONFIG_DISENABLE){ String result = service.enable(old); if (result.equals("启用成功")){ res.initTrue(result); }else { res.initFalse(result,LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("售后服务已经启用,不用重复启用",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("非法操作",LunaResultBean.ERROR_BUSINESS); } }else { res.initFalse("售后服务不存在",LunaResultBean.ERROR_BUSINESS); } return res; } /** * 分页查询 【售后服务日志】注意 是 日志接口 * * 注意接口地址 * /ten/goodsAid/log/pageFind * @param entity * 实例对象 * @return 标准返回对象 */ @Override public PageResult<GoodsAidLog> pageFind(GoodsAidLog entity) { //当前租户 TenementUser tenementUser = RequestData.TENEMENT_USER.get(); String tenementId = tenementUser.getTenementId(); entity.setTenementId(tenementId); Page<GoodsAidLog> page = service.pageFindLog(entity); PageResult<GoodsAidLog> res = new PageResult<>(); res.initTrue(page.getTotalElements(),page.getContent()); return res; } /** * 新增实例 【售后服务日志】注意 是 日志接口 * 注意接口地址!!!!!!!!! * /ten/goodsAid/log/insert * * 日志记录只是做保存 * @param entity * 实例对象 * @return 标准返回对象 */ @Override public AjaxResult<GoodsAidLog> insert(@RequestBody GoodsAidLog entity) { LunaResultBean.checkField(entity,"goodsAidUid","memberId","securityCode","goodsId"); AjaxResult<GoodsAidLog> res = new AjaxResult<>(); // 当前租户 TenementUser tenementUser = RequestData.TENEMENT_USER.get(); String tid = tenementUser.getTenementId(); entity.setUid(LunaIDUtil.uid()); entity.setTenementId(tid); GoodsAidLog result = service.saveLog(entity); if (result != null){ res.initTrue(result); }else { res.initFalse("售后服务日志保存失败",LunaResultBean.ERROR_BUSINESS); } return res; } }