• 【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);
    
    }
    View Code

    实现层:

    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;
        }
    }
    View Code

    这样的设计

    导致 @RestController 注解写在实现层并不能被解析到!!!!!!!

    这也就导致了最上面的问题,命名 controller的实现方法 POST请求的加了@RequestBody ,前台也传值了,但就是不能接收到值!!!

  • 相关阅读:
    Log4j2 打印日志实践
    解决docker容器启动不了,处于Exited问题
    dockerfile如何编写
    mysql(查询从句)
    线性表代码实现
    mysql(子查询)
    mysql(连表查询)
    mysql(基础命令)
    mysql安装
    mysql建表
  • 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/9283232.html
Copyright © 2020-2023  润新知