发表于: 2019-11-18 23:23:51

1 1109


今天完成的事情:

改bug,对于我们这种菜鸡来说,每解决一个BUG都是一个学习的过程。



这是和组员们商量好后列表查询学习对象的最后方案流程。我这个接口要通过token获取用户id,查询用户年级信息。多了三个判断。分别对应几个功能。这是最终的接口代码。然后这里还有个问题。最开始这个接口我是没/u的,后来方案改成了后,我也没加,然后线上环境测试的时候,总是获取不到列表。最后发现是这个/u的问题。

因为拦截器是通过/u拦截所有登录后才能用的接口。而我这里要自动通过token获取用户id,所以需要加上/u。

总结就是,在这里,接口需要获取到用户信息,就要加上/u让拦截器来判断。

@GetMapping("/a/u/list/study")
public Map<String, Object> studySelectList(HttpServletRequest request,StudyObject studyObject,
                                          @RequestParam(value = "status", defaultValue = "1") Integer status,
                                          @RequestParam(value = "sort", defaultValue = "0") Integer sort,
                                          @RequestParam(value = "page", defaultValue = "1") Integer page,
                                          @RequestParam(value = "size", defaultValue = "10") Integer size) {
   HashMap<String, Object> result = new HashMap<>(16);
   log.info("获取第{}页共{}行学习对象信息{}按照{}排序", page, size, studyObject, sort);
   try {
       /*判断用户对应年级字段是否有年级数据,有就根据年级查询,没有就返回错误信息*/
       log.info(request.getCookies());
       long userId = JWTUtil.getUserIdFromToken(request);
       log.info("id是"+userId);
       User user = userServer.selectByUserIdAllInfo(userId);
       log.info(user);
       int grade=user.getUserClass();
       if (0 == grade) {
           result.put("code", GRADE_ERROR.getCode());
           result.put("msg", GRADE_ERROR.getMsg());
       }else {
           /*前台默认查询上架的学习对象*/
           studyObject.setStatus(status);
           /*如果传科目为0,将返回全部科目学习对象*/
           if (new Integer(0).equals(studyObject.getCourse())) {
               studyObject.setCourse(null);
           }
           /*如果前端不传年级,将使用当前用户年级为查询条件*/
           if (null == studyObject.getGrade()) {
               studyObject.setGrade(grade);
           }
           /*如果前端传年级为0*/
           if (new Integer(0).equals(studyObject.getGrade())){
               studyObject.setGrade(null);
           }
           /*排序方式*/
           if (sort == 1) {
               PageHelper.startPage(page, size, "browse_count desc,create_at desc");
           } else if (sort == 2) {
               PageHelper.startPage(page, size, "buy_count desc,create_at desc");
           } else if (sort == 3) {
               studyObject.setPrice(BigDecimal.valueOf(0));
               PageHelper.startPage(page, size, "create_at desc");
           } else if (sort == 0) {
               /*按照创建时间倒序*/
               PageHelper.startPage(page, size, "create_at desc");
           }
           List<StudyObject> studyObjectList = studyObjectServer.selectSelective(studyObject);
           PageInfo<StudyObject> pageInfo = new PageInfo<>(studyObjectList);
           /*获取总数据量*/
           Long total = pageInfo.getTotal();
           if (!studyObjectList.isEmpty()) {
               result.put("code", SUCCESS.getCode());
               result.put("msg", SUCCESS.getMsg());
               result.put("total", total);
               result.put("grade",grade);
               result.put("data", studyObjectList);
               /*查询到的id集合*/
               List<Long> selectStudyObjectIdList = new ArrayList();
               for (StudyObject studyObject1 : studyObjectList) {
                   selectStudyObjectIdList.add(studyObject1.getId());
               }
               log.info("查到的学习对象ID是{}", selectStudyObjectIdList);
           } else {
               result.put("code", SUCCESS.getCode());
               result.put("msg", SUCCESS.getMsg());
               result.put("data", studyObjectList);
               log.info("未查询到对应学习对象信息");
           }
       }
       return result;
   } catch (Exception e) {
       e.printStackTrace();
       result.put("code", REQUEST_FAILED.getCode());
       result.put("msg", REQUEST_FAILED.getMsg());
       return result;
   }
}

由此引出另外一个问题。我删除,查看个人详情,一切和用户有关的,都获取到用户id。增加用户id来对数据的操作,比如你删除一个收藏,除了传id,还要判断,这条收藏是不是当前用户的。因为不判断这条数据是这个用户的话,用postman这样的工具是可以直拉调接口传id乱删的。


明天计划的事情:

 把代码都改下,凡是和用户有关的数据,都加上判断是否为当前用户这个查询条件。
遇到的问题:


收获:

总算是理解了 /a/u 这样写的含意。


返回列表 返回列表
评论

    分享到