第一次接口开发
来源:互联网 发布:监控预警系统 java 编辑:程序博客网 时间:2024/06/06 03:29
时间:2017/8/9-15;郑州;报警接口实现。
由于java仅仅入门,并且开发设计经验不足,导致简单的项目也要花费大量的时间去堆积,但是收获还是很大的。
组织上给的任务很适合新手,而且善于引导,乐于助人。
接口的目的:统一的报警接口,实现邮件与短信通知。
遇到的困难:
spring-boot工程不会创建 安装完spring-boot相关插件后配置maven工程,新建maven工程。
不懂设计模式,看不懂多层次的包结构,和控制反转这些词的含义。
完全没有设计方法,浑水摸鱼。
经过两天的学习,终于把工程看懂了一点。大致又了解了eclipse的操作。
学习EA,画出类图,刚开始类图完全不会。就一个接口,然后一次次扩展。最终类图还是很简洁的。
经过抽取和封装终于看着有点像样了。对于spring-boot的开发架构有了一点了解,然后开始写代码。
刚开始是模仿前人的工程,先写出接口,最先的接口有sengWarning,sendMail,sendSMG,方法。
public boolean sendWarning(Warning warning) throws Exception{ transmit(getReceiver(warning.getTo()), warning.getTitle(), warning.getContent()); return true; }
用了两个私有方法处理对象。然后对收件人进行处理,分割字符,为了简化操作,一开始是把to做成邮箱号码混合接受的字符串,再利用二维数组分割成邮件和短信两种,再用for循环每次发送一封信息。
这样做就是完全的没有设计模式的代码,几乎所有的代码都在接口实现类中实现,于是问人,大佬帮忙指出问题:收件人处理不实用,可以加个属性type来区分,方法的返回值最好别不要用二维数组(最好不要用,占地方),统一接口的报警应该有统一的返回值,所有的公共方法都应该加参数判断(这是因为只要是公共方法就有可能被调用)。
于是添加属性type;对type进行判断,区分功能;返回对象依旧不会处理,大佬指导,如果最终返回值是数组,就要反思是不是可以批量处理,于是找到,javamail是支持传入sring数组作为收件人信息的。而httpClient短信接口也有相应的配置,但是数据部分没有string数组的传送方法,想了很久,用for循环虽然可以做到发送,但是明显不是同步的,不能知道单个是否成功。后来终于通过查看源码,发现to是一个可以以“,”分割的多值输入。
对于多个对象的处理,首先应该想:是否存在批量的处理方法。没有批量的方法就要看属性是否支持多对象组合,如果都没有就自己建批量方法。
方法可以申请为静态,这是为了节省每次方法调用,但是有些对象要在方法中创建,这是防止修改静态对象被多线程干扰。
结果的返回值最好是封装成一个对象,这样有利于错误信息的查找。
对于所有公共方法,都要判断两次 :1、对象为空 2、值为空 最好采用
if(null == warning){ return new Result(false, "参数不合法", 1001); } //StringUtils.isBlank(""); if (null ==warning.getTo()|| "".equals(warning.getTo().trim())) { return new Result(false, "收件人为空", 1002); }这样不会报空指针错误。
后面导师看代码,指出几个问题:fianl变量与静态变量定义重复,导致两个文件过耦合,最好删除一个;邮件与短信的返回值接受对象以及方法都具有共同点,可以抽取出抽象类,类中对象的初始化最好放在类中,不要定义在config类中。
最后又学习了一下测试工具postman和jmeter,json的书写格式{“”:“”,“”:“”}
注意事项: 配置文件中字符串不要加“”
post对象不能静态
非空判断很重要
异常申明用结果类代替
按多个字符分割spit("[,;]")
最后上代码
@Servicepublic class WarningServiceImpl implements WarningService { private MSGUtil msgUtil; /*信息发送入口 * warning 报警信息 boolean[] 按序返回结果 */ @Override public Result sendWarning(Warning warning) { /* * 判断对象为空? */ if (null == warning) { return new Result(false, WarningReport.WARNINGFAILD); } /* * 判断type :mail--邮件;msg--短信 */ if ("mail".equals(warning.getType())) { /* * 邮件类对象调用 */ msgUtil = new MailUtil(); } else if ("msg".equals(warning.getType())) { /* * 短信类对象调用 */ msgUtil = new SMSUtil(); } else { /* * 邮件格式错误 */ return new Result(false, WarningReport.FORMATERROR); } return msgUtil.getMSG(warning.getTo() , warning.getTitle(), warning.getContent()); }}好了,终于完成第一篇了。希望开个好头。
- 第一次接口开发
- 第一次开发
- 第一次接口测试总结
- 第一次项目开发
- 第一次搞ucLinux开发
- 敏捷开发第一次接触
- 第一次独立开发App
- 第一次接触android开发
- iOS 开发 第一次
- 第一次开发简单
- 第一次开发随笔(未完)
- 接口开发
- 接口开发
- 接口开发
- 接口开发
- 第一次写App接口的经验
- 第一次给APP提供接口的感想
- 我的第一次---接口测试(Jmeter)
- java并发包
- 解析「三户模型」及建立账户模型
- PCM EQ DRC 音频处理关键词
- 全屏fullscreenAPI
- HDU
- 第一次接口开发
- ios 不能触发click事件
- Git使用详细教程
- GROUP BY HAVING用法
- 理解本真的REST架构风格
- redis的安装
- PHP制作验证码
- Docker学习总结——非常详细的 Docker 学习笔记
- .NET用QrCodeNet来生成二维码