关于service实现中方法是抛出异常还是进行处理

下面是我通过视频了解到的浅显的东西,不一定正确的,我没有经过严格的查询,纯属记录,但是应该是有一定道理的。

关于我们service实现类中的方法要不要向外抛出异常,也就是抛给我们的调用方也就是controller。注意service就是进行业务处理的我们都要自己在本层进行解决,也就是说都要trycache

但是这个try cache也是有说头的,如果我们方法的返回值是void 那么我们出错了我们的调用方是不知道的,我们需要使用异常告诉调用方到底是什么问题,因此需要抛,但是如果我们有返回值,我们不需要抛出异常,我们调用法拿到方法的返回值之后,验证这个值,如果有问题就解决或者抛出异常。

代码如下:

@Override
public File generateCourseHtml(Long courseId) {
    //静态化文件
    File htmlFile  = null;
    try{
        //配置freemarker
        Configuration configuration = new Configuration(Configuration.getVersion());
        //加载模板
        //选指定模板路径,classpath下templates下
        //得到classpath路径
        String classpath = this.getClass().getResource("/").getPath();
        configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
        //设置字符编码
        configuration.setDefaultEncoding("utf-8");

        //指定模板文件名称
        Template template = configuration.getTemplate("course_template.ftl");

        //准备数据
        CoursePreviewDto coursePreviewInfo = this.getCoursePreviewInfo(courseId);

        Map map = new HashMap<>();
        map.put("model", coursePreviewInfo);

        //静态化
        //参数1:模板,参数2:数据模型
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
        System.out.println(content);
        //将静态化内容输出到文件中
        InputStream inputStream = IOUtils.toInputStream(content);
        //输出流
        //创建静态化文件
        htmlFile = File.createTempFile("coursepublish",".html");
        FileOutputStream outputStream = new FileOutputStream(htmlFile);
        IOUtils.copy(inputStream, outputStream);

    }catch (Exception ex){
        log.error("课程静态化异常,课程id{}",courseId,ex);
        ex.printStackTrace();
    }
    return htmlFile;
}

@Override
public void uploadCourseHtml(Long courseId, File file) {
    try{
        MultipartFile multipartFile = MultipartSupportConfig.getMultipartFile(file);
        String course = mediaServiceClient.uploadFile(multipartFile, "course/"+courseId+".html");
        if(course==null){
            log.debug("远程调用走降级逻辑得到上船结果为null,课程id为{}",courseId);
            XueChengPlusException.cast("上传静态文件过程中存在异常");
        }
    }catch(Exception e){
        e.printStackTrace();
        XueChengPlusException.cast("上传静态文件过程中存在异常");
    }

 

 可以看到第一个方法有返回值我们没有抛出异常使用trycache捕获异常,第二个我们仍然使用trycache,但是因为没有返回值要抛出特定异常信息,高低调用方。

调用方

File file = coursePublishService.generateCourseHtml(courseId);
if(file==null){
    XueChengPlusException.cast("生成的静态页面为空");
}
//上传静态文件到minio
coursePublishService.uploadCourseHtml(courseId,file);

你可能感兴趣的:(java,tomcat,前端)