日常记录:MybatisPlus自动填充+Swagger配置+全局时间设置+二级分类实现

目录结构:
在这里插入图片描述
1、异常处理

自定义异常类GuliException:

/*自定义异常类*/
@Data
@AllArgsConstructor   //生成有参构造函数
@NoArgsConstructor    //生成无参构造函数
public class GuliException extends RuntimeException {

    private Integer code;   //状态码
    private String msg; //异常信息
}

全局异常处理GlobalExceptionHandler:

@ControllerAdvice
@Slf4j   //将错误日志输出到文件中
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody   //为了显示数据
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常处理");
    }


    /*自定义异常*/
    @ExceptionHandler(GuliException.class)
    @ResponseBody   //为了显示数据
    public R error(GuliException e){
        log.error(e.getMessage()); //将错误日志输出到文件中
        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }

}

2、MybatisPlus自动填充配置:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        /*注意,这里是属性名*/
        this.setFieldValByName("gmtCreate",new Date(),metaObject);
        this.setFieldValByName("gmtModified",new Date(),metaObject);

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified",new Date(),metaObject);
    }
}

在这里插入图片描述
3、Swagger配置:

@Configuration//配置类
@EnableSwagger2 //swagger注解
public class SwaggerConfig {

    @Bean
    public Docket webApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("webApi")
                .apiInfo(webApiInfo())
                .select()
                .paths(Predicates.not(PathSelectors.regex("/admin/.*")))
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .build();

    }

    private ApiInfo webApiInfo(){

        return new ApiInfoBuilder()
                .title("网站-课程中心API文档")
                .description("本文档描述了课程中心微服务接口定义")
                .version("1.0")
                .contact(new Contact("java", "http://atguigu.com", "1123@qq.com"))
                .build();
    }
}

4、全局时间格式配置

application.yml

#返回json的全局时间格式
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

实体类中的日期字段直接使用String类型,无需手动进行转化

@Data
public class TeacherQuery {

    @ApiModelProperty(value = "教师名称,模糊查询")
    private String name;

    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;

    @ApiModelProperty(value = "查询开始时间", example = "2020-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2020-12-12 10:10:10")
    private String end;
}

5、二级分类实现

 /*查询分类数据*/
    @Override
    public List<SubjectQuery> getSubjects() {
        //查询出所有记录
        List<EduSubject> all = baseMapper.selectList(null);
        List<SubjectQuery> subjectQueryList = new ArrayList<>();

        QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
        //查询出所有的一级分类
        wrapper.eq("parent_id","0");
        //所有的一级分类
        List<EduSubject> list = baseMapper.selectList(wrapper);
        list.forEach(i ->{  //遍历一级分类
            SubjectQuery subjectQuery = new SubjectQuery();
            subjectQuery.setId(i.getId());
            subjectQuery.setLabel(i.getTitle());

            /*获取children*/
            List<SubjectQuery> childrenList = new ArrayList();
            all.forEach(j ->{   //遍历二级分类,找出一级分类下面对应的二级分类
                if(j.getParentId().equals(subjectQuery.getId())){  //踩坑:id为字符串,比较使用equals,不能直接使用==
                    SubjectQuery subjectQuery2 = new SubjectQuery();
                    subjectQuery2.setId(j.getId());
                    subjectQuery2.setLabel(j.getTitle());
                    childrenList.add(subjectQuery2);
                }
            });
            subjectQuery.setChildren(childrenList);
            subjectQueryList.add(subjectQuery);
        });

        return subjectQueryList;
    }

前端二级分类联动,根据一级分类查二级分类:

  subjectLevelOneChanged(){
      for(let i=0;i<this.subjectOneList.length;i++){
          let oneSubject = this.subjectOneList[i]
          if(this.courseInfo.subjectParentId === oneSubject.id){
              this.subjectTwoList = oneSubject.children
              this.courseInfo.subjectId = ''  //清除重选一级分类之后 之前还存在的二级分类(双向绑定id)
          }
      }
  },

欢迎关注公众号Java技术大本营,会不定期分享BAT面试资料等福利。

在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值