【三层架构中使用策略模式,会使得三层架构中使用DAO层出现异常 _第三方API调用 】 | IT修真院·坑乎
咨询电话 : 010-59478634
切换导航
首页
我的提问
我的回答
我的点赞
消息通知
个人主页
×
提示
尚未登陆,前往官网登陆?
×
提示
尚未登陆,前往官网登陆?
三层架构中使用策略模式,会使得三层架构中使用DAO层出现异常
我也踩过这个坑(
1
)
已统计您的踩坑,无需重复点击
回答(1)
第三方API调用
详细描述
在原有三层架构中,我在controller 中调用一个策略模式,策略模式的接口实现类等同于service层中的实现类,service实现类再调用一个DAO层,这样的结构上,会出现服务调用dao出错,调用的DAO层为空。
错误截图
请求失败,上传文件至OSS出错。 对调用的dao出错。
源码
controller // 执行上传图片到阿里云 @RequestMapping(value = "/uploadToAliYun", method = RequestMethod.POST) @ResponseBody public void userPhotoUploadToALiYun(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException { String result = null; // 使用策略模式 UserPhotoUploadStrategyContext context = new UserPhotoUploadStrategyContext(new UserPhotoUploadToAliYunOSSImpl()); context.executeUserPhotoUploadStrategy(request,response,file); // 上传文件 // result = userPhotoUploadToAliYunOSS.userPhotoUploadToOSS(request, response, file); PrintWriter out = response.getWriter(); out.print(result); out.flush(); out.close(); logger.info("上传阿里云返回结果:" + result ); } services: public interface UserPhotoUploadStrategy { String userPhotoUploadToOSS(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws IOException; } 实现类: /** * * @param request 请求信息 * @param response 响应信息 * @param file 文件输入流 * @return key 存在于OSS 的键值 * @throws IOException IO流异常 */ @Override public String userPhotoUploadToOSS(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws IOException { applicationContext.getBean("oSSUtilsByALiYun"); String key = ""; String result =""; // 获取上传前源文件名、文件大小 String originalFileName = file.getOriginalFilename(); Long originalFileSize = file.getSize(); logger.info("上传前的文件名:" + originalFileName); // 将 multipartfilein 转化为 inputstream流 CommonsMultipartFile cFile = (CommonsMultipartFile) file; DiskFileItem fileItem = (DiskFileItem) cFile.getFileItem(); InputStream inputStream = fileItem.getInputStream(); if (!file.isEmpty()){ OSSClient ossClient = task07.util.aliyun.oss.OSSUtilsByALiYun.getOSSClient(); String newFileName = null; if (originalFileName.length()>0){ newFileName = UUID.randomUUID() +""; } // 将文件上传并获得返回值 key(文件名称) key = OSSUtilsByALiYun.uploadObject2OSS(ossClient, inputStream, OSSUtilsByALiYun.getBucketName(), originalFileName,newFileName, originalFileSize,OSSUtilsByALiYun.getFolder()); } //将文件名写入数据库 if (!key.equals("")){ HttpSession userNamesession =request.getSession(); String userName = (String) userNamesession.getAttribute("userName"); if (userName.equals(null)){ logger.info("写入数据库出错,用户名为 null"); } logger.info("userName:" + userName ); logger.info("key:" + key ); System.out.println(userLoginDao); System.out.println(userLoginDao.queryByName(userName).toString()); userLoginDao.updateHeadPhoto(userName,key); UserLogin userLoginText = userLoginDao.queryByName(userName); String databaseHeadPho = userLoginText.getHead_photo(); logger.info("写入数据库的key 值为: " + databaseHeadPho); // 将 key 值写入数据库 if (databaseHeadPho.equals(key)){ logger.info("写入文件一致,上传成功!"); result = "文件上传成功!"; }else{ result = "上传成功,写入数据库不一致!"; } }else { logger.info("文件上传失败!"); result = "文件上传失败!"; } return result; } } 策略模式的context : public class UserPhotoUploadStrategyContext { private UserPhotoUploadStrategy userPhotoUploadStrategy; public UserPhotoUploadStrategyContext( UserPhotoUploadStrategy userPhotoUploadStrategy){ this.userPhotoUploadStrategy = userPhotoUploadStrategy; } public String executeUserPhotoUploadStrategy(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws IOException { System.out.println("context 之前"); return userPhotoUploadStrategy.userPhotoUploadToOSS(request, response, file); } }
service 调用 dao 为空。
编辑于2024-11-22
时间排序
热门排序
[无名弟子]黄*彬
0
策略模式当成一个工具类来使用,不要嵌套在三层架构中。
查看全部>
编辑于2018-09-21
首页
1
末页
去第
页
确定
Copyright ©2015 北京葡萄藤信息技术有限公司 All Rights Reserved | 京ICP备15035574号-1
复制链接
新浪微博
微信扫一扫
2601
0
10
三层架构中使用策略模式,会使得三层架构中使用DAO层出现异常
1
1