发表于: 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 这样写的含意。
评论