关于SpringBoot中的MVC Controller层踩坑存入session 或者model 返回值

  • Post author:
  • Post category:其他




本人最新博客地址

blog



问题描述:


话不多说,又是每日一踩坑,具体是这样的,贴上代码

    @GetMapping("/getUserCheckType")
    @ResponseBody
    public Map getUserCheckType(String userID, Model model){
       System.out.println("操作者的userId为 : "+ userID);
        String url = "user/checkType/{userID}";
        /**
         * 调用工具类
         */
        Map map = callServiceUtils.callGetMethodHaveArgs(url, userID);
        //System.out.println(map);
       if(map.get("resultCode").equals("1") && map.get("data")!=null){
            //拿到data值
            Map data = (Map) map.get("data");
            //拿到检查类别map
            List checkTypeInfo = (List) data.get("checkTypeInfo");
            System.out.println("存入session中的值 checkTypes: "+checkTypeInfo);
            //将map转换为实体类
            /*CheckTypeInfo checkTypes = JSON.parseObject(JSON.toJSONString(checkTypeInfo), CheckTypeInfo.class);*/
            List<CheckTypeInfo> checkTypeInfos = JSON.parseArray(JSON.toJSONString(checkTypeInfo), CheckTypeInfo.class);
            model.addAttribute("checkTypes", checkTypeInfos);
            System.out.println("取值model: "+ model.getAttribute("checkTypes"));
        }
        return map;
    }

我要实现的功能基本就是能够将后端的数据存到session或者model中,虽然我觉得对于我这个项目来说session和model的区别不会很大(更多的是因为菜吧,所以需要不断的学习),结果就烦了挺严重的错误,

首先



第一个错误

model中其实存值是有条件的 , 我去查看别的大佬的说明 , 支出了session和model的区别

在这里插入图片描述


https://blog.nowcoder.net/n/290df5af9a58477ead5a52256f5d548d

很明显的指出model的使用,一定要返回一个页面,我这边是返回了 一个map ,相当于返回了JSON . 所以我这边这个项目只能采用session或者前端接受JSON进行JS操作



第二个错误

由于这个函数我是在页面加载时调用的,然后通过取session中的值进行循环渲染形成下拉框

在这里插入图片描述

但是问题就会遇到,你进入这个页面,下拉框是空的,只有主动刷新一次才会有下拉值,可能是异步的原因吧

在这里插入图片描述

所以就要再前一个页面就完成这个操作,提前调用接口并存好值,不然就会取不到值.



第三个错误

这个只能大概形容一下 , 就是如果返回值为Model , 但是又使用了@Response这个注解 , 页面就不会寻找 存在Attribute中的值 , 直接根据注解返回的字符串进行下一行 操作 . 所以尽量不要混合使用 .




解决方案:


最后我正确的做法就是,在前一个页面加载 进行调用接口 , 并把数据存入到 session中 , 然后 在前段 使用 Thymeleaf 进行渲染生成下拉框 .



版权声明:本文为qq_35332494原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。