当前位置: 首页 > news >正文

厂字型布局网站例子php做学校网站免费

厂字型布局网站例子,php做学校网站免费,网站建设平台源码,做网站需要交钱吗《深入剖析题目接口控制器#xff1a;功能、实现与应用》 一、引言 在在线编程平台或竞赛系统中#xff0c;题目管理和提交是核心功能之一。QuestionController 类作为控制器层#xff0c;承担着处理与题目相关的各种请求的重要职责#xff0c;包括题目的增删改查、题目提…《深入剖析题目接口控制器功能、实现与应用》 一、引言 在在线编程平台或竞赛系统中题目管理和提交是核心功能之一。QuestionController 类作为控制器层承担着处理与题目相关的各种请求的重要职责包括题目的增删改查、题目提交等操作。本文将详细剖析该类的代码深入理解其功能和实现细节。 二、类概述 QuestionController 类使用 Spring 的 RestController 注解表明它是一个 RESTful 风格的控制器用于处理 HTTP 请求。它位于 / 根路径下提供了一系列与题目相关的接口。该类依赖于 QuestionService、UserFeignClient 和 QuestionSubmitService 等服务通过这些服务来完成具体的业务逻辑。 RestController RequestMapping(/) Slf4j public class QuestionController {Resourceprivate QuestionService questionService;Resourceprivate UserFeignClient userFeignClient;Resourceprivate QuestionSubmitService questionSubmitService;private final static Gson GSON new Gson();// ... 具体方法 ... } 三、增删改查功能实现 3.1 创建题目 PostMapping(/add) public BaseResponseLong addQuestion(RequestBody QuestionAddRequest questionAddRequest, HttpServletRequest request) {if (questionAddRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}Question question new Question();BeanUtils.copyProperties(questionAddRequest, question);ListString tags questionAddRequest.getTags();if (tags ! null) {question.setTags(GSON.toJson(tags));}ListJudgeCase judgeCase questionAddRequest.getJudgeCase();if (judgeCase ! null) {question.setJudgeCase(GSON.toJson(judgeCase));}JudgeConfig judgeConfig questionAddRequest.getJudgeConfig();if (judgeConfig ! null) {question.setJudgeConfig(GSON.toJson(judgeConfig));}questionService.validQuestion(question, true);User loginUser userFeignClient.getLoginUser(request);question.setUserId(loginUser.getId());question.setFavourNum(0);question.setThumbNum(0);boolean result questionService.save(question);ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR);long newQuestionId question.getId();return ResultUtils.success(newQuestionId); } 功能处理创建题目的请求将用户提交的题目信息保存到数据库中。实现步骤 检查请求参数是否为空若为空则抛出参数错误异常。将 QuestionAddRequest 对象的属性复制到 Question 对象中。对题目标签、测试用例和判题配置进行 JSON 序列化处理。调用 questionService 的 validQuestion 方法对题目信息进行校验。获取当前登录用户的信息并将用户 ID 关联到题目中。初始化题目点赞数和收藏数为 0。调用 questionService 的 save 方法保存题目信息若保存失败则抛出操作错误异常。返回新创建题目的 ID。 3.2 删除题目 PostMapping(/delete) public BaseResponseBoolean deleteQuestion(RequestBody DeleteRequest deleteRequest, HttpServletRequest request) {if (deleteRequest null || deleteRequest.getId() 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}User user userFeignClient.getLoginUser(request);long id deleteRequest.getId();// 判断是否存在Question oldQuestion questionService.getById(id);ThrowUtils.throwIf(oldQuestion null, ErrorCode.NOT_FOUND_ERROR);// 仅本人或管理员可删除if (!oldQuestion.getUserId().equals(user.getId()) !userFeignClient.isAdmin(user)) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR);}boolean b questionService.removeById(id);return ResultUtils.success(b); } 功能处理删除题目的请求从数据库中删除指定 ID 的题目。实现步骤 检查请求参数是否合法若不合法则抛出参数错误异常。获取当前登录用户的信息。根据题目 ID 查询题目信息若题目不存在则抛出未找到错误异常。检查当前用户是否有删除权限只有题目创建者或管理员才能删除题目若没有权限则抛出无权限错误异常。调用 questionService 的 removeById 方法删除题目信息并返回删除结果。 3.3 更新题目仅管理员 PostMapping(/update) AuthCheck(mustRole UserConstant.ADMIN_ROLE) public BaseResponseBoolean updateQuestion(RequestBody QuestionUpdateRequest questionUpdateRequest) {if (questionUpdateRequest null || questionUpdateRequest.getId() 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}Question question new Question();BeanUtils.copyProperties(questionUpdateRequest, question);ListString tags questionUpdateRequest.getTags();if (tags ! null) {question.setTags(GSON.toJson(tags));}ListJudgeCase judgeCase questionUpdateRequest.getJudgeCase();if (judgeCase ! null) {question.setJudgeCase(GSON.toJson(judgeCase));}JudgeConfig judgeConfig questionUpdateRequest.getJudgeConfig();if (judgeConfig ! null) {question.setJudgeConfig(GSON.toJson(judgeConfig));}// 参数校验questionService.validQuestion(question, false);long id questionUpdateRequest.getId();// 判断是否存在Question oldQuestion questionService.getById(id);ThrowUtils.throwIf(oldQuestion null, ErrorCode.NOT_FOUND_ERROR);boolean result questionService.updateById(question);return ResultUtils.success(result); } 功能处理更新题目的请求只有管理员才能执行此操作。实现步骤 检查请求参数是否合法若不合法则抛出参数错误异常。将 QuestionUpdateRequest 对象的属性复制到 Question 对象中。对题目标签、测试用例和判题配置进行 JSON 序列化处理。调用 questionService 的 validQuestion 方法对题目信息进行校验。根据题目 ID 查询题目信息若题目不存在则抛出未找到错误异常。调用 questionService 的 updateById 方法更新题目信息并返回更新结果。 3.4 根据 ID 获取题目 GetMapping(/get) public BaseResponseQuestion getQuestionById(long id, HttpServletRequest request) {if (id 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}Question question questionService.getById(id);if (question null) {throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);}User loginUser userFeignClient.getLoginUser(request);// 不是本人或管理员不能直接获取所有信息if (!question.getUserId().equals(loginUser.getId()) !userFeignClient.isAdmin(loginUser)) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR);}return ResultUtils.success(question); } 功能根据题目 ID 获取题目信息只有题目创建者或管理员才能获取完整信息。实现步骤 检查题目 ID 是否合法若不合法则抛出参数错误异常。根据题目 ID 查询题目信息若题目不存在则抛出未找到错误异常。获取当前登录用户的信息。检查当前用户是否有获取完整信息的权限若没有权限则抛出无权限错误异常。返回题目信息。 3.5 根据 ID 获取脱敏后的题目信息 GetMapping(/get/vo) public BaseResponseQuestionVO getQuestionVOById(long id, HttpServletRequest request) {if (id 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}Question question questionService.getById(id);if (question null) {throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);}return ResultUtils.success(questionService.getQuestionVO(question, request)); } 功能根据题目 ID 获取脱敏后的题目信息适用于普通用户查看。实现步骤 检查题目 ID 是否合法若不合法则抛出参数错误异常。根据题目 ID 查询题目信息若题目不存在则抛出未找到错误异常。调用 questionService 的 getQuestionVO 方法获取脱敏后的题目信息并返回。 3.6 分页获取题目列表封装类 PostMapping(/list/page/vo) public BaseResponsePageQuestionVO listQuestionVOByPage(RequestBody QuestionQueryRequest questionQueryRequest,HttpServletRequest request) {long current questionQueryRequest.getCurrent();long size questionQueryRequest.getPageSize();// 限制爬虫ThrowUtils.throwIf(size 20, ErrorCode.PARAMS_ERROR);PageQuestion questionPage questionService.page(new Page(current, size),questionService.getQueryWrapper(questionQueryRequest));return ResultUtils.success(questionService.getQuestionVOPage(questionPage, request)); } 功能分页获取题目列表并返回封装后的题目信息QuestionVO。实现步骤 从请求参数中获取当前页码和每页数量。检查每页数量是否超过限制若超过则抛出参数错误异常防止爬虫过度请求。调用 questionService 的 page 方法进行分页查询。调用 questionService 的 getQuestionVOPage 方法将查询结果封装为 QuestionVO 并返回。 3.7 分页获取当前用户创建的题目列表 PostMapping(/my/list/page/vo) public BaseResponsePageQuestionVO listMyQuestionVOByPage(RequestBody QuestionQueryRequest questionQueryRequest,HttpServletRequest request) {if (questionQueryRequest null) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}User loginUser userFeignClient.getLoginUser(request);questionQueryRequest.setUserId(loginUser.getId());long current questionQueryRequest.getCurrent();long size questionQueryRequest.getPageSize();// 限制爬虫ThrowUtils.throwIf(size 20, ErrorCode.PARAMS_ERROR);PageQuestion questionPage questionService.page(new Page(current, size),questionService.getQueryWrapper(questionQueryRequest));return ResultUtils.success(questionService.getQuestionVOPage(questionPage, request)); } 功能分页获取当前用户创建的题目列表并返回封装后的题目信息QuestionVO。实现步骤 检查请求参数是否为空若为空则抛出参数错误异常。获取当前登录用户的信息并将用户 ID 设置到查询请求中。从请求参数中获取当前页码和每页数量。检查每页数量是否超过限制若超过则抛出参数错误异常防止爬虫过度请求。调用 questionService 的 page 方法进行分页查询。调用 questionService 的 getQuestionVOPage 方法将查询结果封装为 QuestionVO 并返回。 3.8 分页获取题目列表仅管理员 PostMapping(/list/page) AuthCheck(mustRole UserConstant.ADMIN_ROLE) public BaseResponsePageQuestion listQuestionByPage(RequestBody QuestionQueryRequest questionQueryRequest,HttpServletRequest request) {long current questionQueryRequest.getCurrent();long size questionQueryRequest.getPageSize();PageQuestion questionPage questionService.page(new Page(current, size),questionService.getQueryWrapper(questionQueryRequest));return ResultUtils.success(questionPage); } 功能分页获取题目列表只有管理员才能执行此操作。实现步骤 从请求参数中获取当前页码和每页数量。调用 questionService 的 page 方法进行分页查询。返回查询结果。 四、其他功能实现 4.1 编辑题目用户 PostMapping(/edit) public BaseResponseBoolean editQuestion(RequestBody QuestionEditRequest questionEditRequest, HttpServletRequest request) {if (questionEditRequest null || questionEditRequest.getId() 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}Question question new Question();BeanUtils.copyProperties(questionEditRequest, question);ListString tags questionEditRequest.getTags();if (tags ! null) {question.setTags(GSON.toJson(tags));}ListJudgeCase judgeCase questionEditRequest.getJudgeCase();if (judgeCase ! null) {question.setJudgeCase(GSON.toJson(judgeCase));}JudgeConfig judgeConfig questionEditRequest.getJudgeConfig();if (judgeConfig ! null) {question.setJudgeConfig(GSON.toJson(judgeConfig));}// 参数校验questionService.validQuestion(question, false);User loginUser userFeignClient.getLoginUser(request);long id questionEditRequest.getId();// 判断是否存在Question oldQuestion questionService.getById(id);ThrowUtils.throwIf(oldQuestion null, ErrorCode.NOT_FOUND_ERROR);// 仅本人或管理员可编辑if (!oldQuestion.getUserId().equals(loginUser.getId()) !userFeignClient.isAdmin(loginUser)) {throw new BusinessException(ErrorCode.NO_AUTH_ERROR);}boolean result questionService.updateById(question);return ResultUtils.success(result); } 功能处理编辑题目的请求只有题目创建者或管理员才能执行此操作。实现步骤 检查请求参数是否合法若不合法则抛出参数错误异常。将 QuestionEditRequest 对象的属性复制到 Question 对象中。对题目标签、测试用例和判题配置进行 JSON 序列化处理。调用 questionService 的 validQuestion 方法对题目信息进行校验。获取当前登录用户的信息。根据题目 ID 查询题目信息若题目不存在则抛出未找到错误异常。检查当前用户是否有编辑权限若没有权限则抛出无权限错误异常。调用 questionService 的 updateById 方法更新题目信息并返回更新结果。 4.2 提交题目 PostMapping(/question_submit/do) public BaseResponseLong doQuestionSubmit(RequestBody QuestionSubmitAddRequest questionSubmitAddRequest,HttpServletRequest request) {if (questionSubmitAddRequest null || questionSubmitAddRequest.getQuestionId() 0) {throw new BusinessException(ErrorCode.PARAMS_ERROR);}// 登录才能提交final User loginUser userFeignClient.getLoginUser(request);long questionSubmitId questionSubmitService.doQuestionSubmit(questionSubmitAddRequest, loginUser);return ResultUtils.success(questionSubmitId); } 功能处理提交题目的请求用户必须登录才能提交。实现步骤 检查请求参数是否合法若不合法则抛出参数错误异常。获取当前登录用户的信息。调用 questionSubmitService 的 doQuestionSubmit 方法处理题目提交并返回提交记录的 ID。 4.3 分页获取题目提交列表 PostMapping(/question_submit/list/page) public BaseResponsePageQuestionSubmitVO listQuestionSubmitByPage(RequestBody QuestionSubmitQueryRequest questionSubmitQueryRequest,HttpServletRequest request) {long current questionSubmitQueryRequest.getCurrent();long size questionSubmitQueryRequest.getPageSize();// 从数据库中查询原始的题目提交分页信息PageQuestionSubmit questionSubmitPage questionSubmitService.page(new Page(current, size),questionSubmitService.getQueryWrapper(questionSubmitQueryRequest));final User loginUser userFeignClient.getLoginUser(request);// 返回脱敏信息return ResultUtils.success(questionSubmitService.getQuestionSubmitVOPage(questionSubmitPage, loginUser)); } 功能分页获取题目提交列表
http://www.dnsts.com.cn/news/65606.html

相关文章:

  • 网站营销推广怎么做网络营销推广咖啡网站设计
  • 不需要iis的网站开发steam网站代做
  • h5 响应式网站国外网站建设与管理 管理课程
  • 潍坊哪里做网站好企业解决方案有哪些
  • 网站开发流程表广州网络营销十年乐云seo
  • 制作网站需要学什么软件网络公司推广软文
  • 上海优化网站关键词wordpress文章函数
  • 虚拟机做实验的网站手机网站打不开
  • 网站改版建设主要wordpress博客文章
  • 中英文双版网站怎么做怎么制作网址内容
  • 无锡网站推广无锡做网站推广链接生成
  • 优酷视频放到网站上怎么做广州搬家公司
  • 手机套 东莞网站建设网站开发转软件开发
  • c网站开发视频教程济宁百度竞价推广
  • 新开的网站建设公司如何推广网站开发软件 d
  • 网站建设是虚拟行业吗手机vi设计公司
  • 动效做的好的网站宁波网站建设信息网
  • 网站域名被注销wordpress删除缓存
  • 网站源码爬取哪个网站做新中式
  • 杭州服装网站建设南京网站制作公司报价
  • 1元云购网站建设微信公众号开发文档官方
  • 俄语网站asp网站管理系统
  • 网站开发背景介绍手机访问网站 自动缩放
  • 房产中介如何做网站在深圳如何注册自己的公司
  • 网站建设与运行优质网站策划
  • 古镇免费网站建设百度识图在线识图
  • 网站建设需要什么硬件和软件九江百度公司
  • 企业建站公司平台用asp.net做网站的书
  • 学网站建设需要多长时间做同城信息网站怎么赚钱
  • 珠海品牌网站建设做网站赚取广告费