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

西安 网站开发 招聘建站模板工程造价

西安 网站开发 招聘,建站模板工程造价,域名注册好如何做网站,做音乐网站目录 一、接口的实现 二、跨域的处理思路 三、全局异常处理 四、面试题 五、总结 一、接口的实现 1. 查询课程接口 思路#xff1a; 典型的分页查询 按需查询 模糊查询的查询 controller#xff1a; ApiOperation(value 课程列表, notes 课程…目录 一、接口的实现 二、跨域的处理思路 三、全局异常处理 四、面试题 五、总结 一、接口的实现 1. 查询课程接口 思路 典型的分页查询 按需查询 模糊查询的查询 controller ApiOperation(value 课程列表, notes 课程列表)PostMapping(/list)public PageResultCourseBase courses(PageParams pageParams, RequestBody CourseBaseInfoDto courseBaseInfoDto) {PageResultCourseBase pageResult courseBaseService.courses(pageParams, courseBaseInfoDto);return pageResult;} service接口及其实现 public interface CourseBaseService extends IServiceCourseBase {PageResult courses(PageParams pageParams, CourseBaseInfoDto courseBaseInfoDto); } Service public class CourseBaseServiceImpl extends ServiceImplCourseBaseMapper, CourseBaseimplements CourseBaseService{Autowiredprivate CourseMarketService courseMarketService;Overridepublic PageResultCourseBase courses(PageParams pageParams, CourseBaseInfoDto courseBaseInfoDto) {PageCourseBase page new Page(pageParams.getPageNo(), pageParams.getPageSize());LambdaQueryWrapperCourseBase wrapper new LambdaQueryWrapper();wrapper.like(StringUtils.hasText(courseBaseInfoDto.getCourseName()),CourseBase::getName,courseBaseInfoDto.getCourseName());wrapper.eq(StringUtils.hasText(courseBaseInfoDto.getAuditStatus()),CourseBase::getAuditStatus,courseBaseInfoDto.getAuditStatus());wrapper.eq(StringUtils.hasText(courseBaseInfoDto.getPublishStatus()),CourseBase::getStatus,courseBaseInfoDto.getPublishStatus());page(page,wrapper);ListCourseBase records page.getRecords();PageResultCourseBase pageResult PageResult.ok(records, page.getTotal());return pageResult;} } 2. 查询课程分类接口 典型的对树形数据结构的查询 通过数据库中的parentId字段就能实现 Service public class CourseCategoryServiceImpl extends ServiceImplCourseCategoryMapper, CourseCategoryimplements CourseCategoryService{/*** 获取分类树* return*/Overridepublic ListCourseCategoryNode courseCategoryTreeNodes() {//1. 先查出所有节点ListCourseCategory categories list();ListCourseCategoryNode courseCategoryNodes BeanUtil.copyToList(categories, CourseCategoryNode.class);ListCourseCategoryNode collect Collections.EMPTY_LIST;if(courseCategoryNodes!null courseCategoryNodes.size()0){collect courseCategoryNodes.stream().filter(category- category.getParentid().equals(1)).map(categoryNode - {ListCourseCategoryNode childrenTreeNodes children(categoryNode.getId(), courseCategoryNodes);categoryNode.setChildrenTreeNodes(childrenTreeNodes);return categoryNode;}).sorted((category1, category2) - category1.getOrderby() null? 0 : category1.getOrderby() - (category2.getOrderby() null? 0 : category2.getOrderby())).collect(Collectors.toList());}return collect;}private ListCourseCategoryNode children(String id, ListCourseCategoryNode categories) {ListCourseCategoryNode collect Collections.EMPTY_LIST;//注意判空if (categories ! null categories.size() 0) {//1. 遍历所有节点 找到其节点的一级子节点collect categories.stream().filter(category - category.getParentid().equals(id)).map(category - {//2. 再对一级子节点进行递归查找子节点category.setChildrenTreeNodes(children(category.getId(), categories));return category;}).sorted((category1, category2) - category1.getOrderby() null? 0 : category1.getOrderby() - (category2.getOrderby() null? 0 : category2.getOrderby())).collect(Collectors.toList());}return collect;} } 注意 1. courseCategoryNodes.stream().filter(category- category.getParentid().equals(1)) 这个是确保第一级就是 真正的第一级同级  而不会出现  第二级也作为父节点 2. 可以使用map 看似这里其实只是一个简单的set而并没有真正的将其对象进行转换所以可以直接使用foreach但是因为这里还有一个sort的后续对流的操作所以可以使用map使用map就能连续的对流进行处理 3. 注意避免空指针 要有这种意识一旦对数组使用stream来操作数组一定不能为null 还有就是在流处理中通常可以获取到对象而去调用对象的get方法此时就需要主要判空 3. 新增课程信息接口 典型的多表新增  并且必须新增完上一个才能新增下一个也就是关联新增 还有就是新增和修改是一个接口需要判断是新增还是修改 可以通过标识位判断另外还可以查看数据库中数据是否存在的方法...老师写的有点问题 这里下面的营销信息是基于上面的基本信息所以说下面一定是新增 正确的做法应该是再添加一个专门的修改方法 这里建议是不要将修改和添加合并 二、跨域的处理思路 1. 前端使用JSONP的方式 2. 使用过滤器 或者是拦截器 适用于单体服务 拦截器 Configuration public class WebConfig implements WebMvcConfigurer {/*** 配置跨域** param registry*/Overridepublic void addCorsMappings(CorsRegistry registry) {// 设置允许跨域的路径registry.addMapping(/**)// 设置允许跨域请求的域名.allowedOriginPatterns(*)// 是否允许cookie.allowCredentials(true)// 设置允许的请求方式.allowedMethods(GET, POST, DELETE, PUT)// 设置允许的header属性.allowedHeaders(*)// 跨域允许时间.maxAge(3600);// 设置可被访问的响应头//.exposedHeaders(jieiwi);} } 过滤器 Configurationpublic class GlobalCorsConfig {/*** 允许跨域调用的过滤器*/Beanpublic CorsFilter corsFilter() {CorsConfiguration config new CorsConfiguration();//允许白名单域名进行跨域调用config.addAllowedOrigin(*);//允许跨越发送cookieconfig.setAllowCredentials(true);//放行全部原始头信息config.addAllowedHeader(*);//允许所有请求方法跨域调用config.addAllowedMethod(*);UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration(/**, config);return new CorsFilter(source);}} 还可以添加CrossOrigin的方式 3. 在网关中配置 gateway:globalcors:cors-configurations:[/**]: # 匹配所有请求allowedOrigins: * #跨域处理 允许所有的域allowedMethods: # 支持的方法- GET- POST- PUT- DELETE 4. 使用nginx反向代理 由于浏览器直接访问对应的服务会跨域那么可以不让浏览器直接访问服务而是先将请求发给nginx再由nigix代理给对应的服务 其实就是将浏览器环境变成了ngixn环境 因为在nginx中配置前端静态资源是很方便的那么就可以利用ngixn直接在浏览器中访问到nginx中的静态资源这里是不会跨域的这是由nginx的特点所决定的nginx本来就可以实现动静分离 然后再在nginx中进行反向代理  将请求代理给服务集群 参考http://t.csdnimg.cn/i2nS9 三、全局异常处理 RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(value PriceException.class)public RestErrorResponse handlePriceException(PriceException e) {return new RestErrorResponse(e.getMessage());}ExceptionHandler(value MethodArgumentNotValidException.class)public RestErrorResponse handleArgsException(MethodArgumentNotValidException e) {ListString collect e.getBindingResult().getFieldErrors().stream().map(fieldError - {return fieldError.getField()fieldError.getDefaultMessage();}).collect(Collectors.toList());return new RestErrorResponse(StrUtil.join(,, collect));}ExceptionHandler(value Exception.class)public RestErrorResponse handException(){return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage());}} 这个最终肯定是要返回前端以标准的响应体返回的这样前端才能拿到异常信息进行显示 至于这个返回给前端的异常信息到底是怎样的可以直接 在抛出异常的时候指定好错误然后在全局异常处理中直接调用异常对象的方法获取到异常信息 return new RestErrorResponse(e.getMessage()); 也可以不使用那里的而是再全局异常中再去自己指定。另外这里的异常信息推荐使用将其封装成枚举 比如下面这样 return new RestErrorResponse(CommonError.UNKOWN_ERROR.getErrMessage()); 反正也就是响应类和枚举类之间的玩法  四、面试题 1. mybais中的分页插件的原理 其实就是将分页参数放到ThreadLocal中然后根据不同的数据库类型添加对应的分页语句重写sql例如将select * from table where axx 将其重写为  select count(*) from table where a xx求出总数然后还有一条select * from table where a xx limit  ,  获取到数据 2. 异常处理 使用全局异常处理机制进行处理 RestControllerAdvice注解和ExceptionHandle可以处理自定义异常和系统异常 返回自己的异常信息 五、总结 还是几个常见接口的实现 现在来说应该说不能有难度了 分页查询、树形查询....新增和修改.... 还是跨域和异常处理 但是学到了更多的处理跨域问题的解决办法 再就是知道mybatis分页插件的原理
http://www.dnsts.com.cn/news/179784.html

相关文章:

  • 科讯cms怎么做网站地图小程序招商加盟
  • 做网站买什么服务器吗商城网站需求
  • 塑胶制品东莞网站建设软件公司 网站建设费分录
  • 泉港做网站公司商城app开发费用多少
  • 宁波网络推广产品服务seo是干什么的
  • 南京网站维护html5开发工具有哪些
  • 自己的网站建设合肥 做网站的公司
  • vs2012网站开发环境it运维工资
  • 备份整个网站洗头竖鞋带名片改良授权做网站不贵
  • 企业网站货物查询怎么做WordPress中文seo
  • 企业网站建设价格上传wordpress到服务器
  • 襄阳做网站公司有哪些搜索引擎推广的特点
  • wordpress $数组网站内容seo
  • 搭建网站php源码简述网站开发工作流程
  • 网站备案完才能建站吗2024最新版qq官方下载
  • 做视频比较好的理财网站有哪些wordpress分页重写
  • 钟表商城网站建设方案做网站怎么不被找到
  • 我想做个卷帘门网站怎么做网站构成的作用是什么
  • 免备案服务器推荐seo优化顾问服务阿亮
  • 化州 网站建设厦门网站设计公司找哪家福建小程序开发
  • 交通运输行业网站建设cetos做网站
  • 上海市住房和城乡建设厅网站查询广告公司业务推广
  • 企业做网站价格软件设计和软件开发的区别
  • 自己做的影视会员网站违法么wordpress 增加域名
  • 建设 公司 网站 请示网站备案产品信息错误
  • 家居行业网站开发个人网站主页设计
  • 厦门网站建设方案报价上海浦东医院网站建设
  • frontpage建设网站的图片视频号分销解决方案的特点
  • 不花钱网站怎么做cad效果图怎么制作
  • 中文企业网站模板htmlwordpress json api auth