文章目录

  • 前言
  • 实战演练
    • POST请求
    • GET请求
    • 接收PC端上传文件
    • 接收Android端上传文件
  • 问题
  • 源码

前言

作为一名普通的Android开发者,想要独立开发一个App,最头疼的地方在于后台接口没人写,正常来说会有以下两种解决方案:

  1. 用第三方服务
  2. 自己搭建服务器

第一种方案我之前试过,使用的是bmob后端云,还别说,当时用的还挺顺手,以致于最后成功的把我的App上架到应用市场,然鹅,好景不长,慢慢的,bmob开始各种收费了,一个是短信没法正常使用,后来我换成了mob的短信SDK,觉得用着不顺手,又换回了bmob的邮件登陆,再后来邮件又收费了,直到最后图片服务无法使用才导致我不想再用第三方服务,改为自己搭建服务
以上是背景介绍,下面进入实战

实战演练

这是一个java webapp项目,以下是开发环境
开发工具:intellij idea ultimate 2018.1
数据库:mysql 5.7.19
服务器:tomcat 7.0.75
开发框架:springmvc + mybatis
以下只放出一些关键代码,这些代码都是经过本人实际测试成功的,详细源码可移步文末的github链接查看

POST请求

代码:

 /*** 用户登陆,Post方式** @param param* @return*/@RequestMapping(value = "login", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> login(@RequestParam("param") String param) {out.println("welcome to login on post,param=" + param);ObjectMapper objectMapper = new ObjectMapper(); //转换器Map<String, Object> map = new HashMap<>();try {LoginBean loginBean = objectMapper.readValue(param, LoginBean.class); //json转换成mapResultBean result = onLogin(loginBean.getName(), loginBean.getPassword());out.println("result==>" + result);map.put("code", result.getCode());map.put("reason", result.getReason());map.put("success", result.isSuccess());} catch (IOException e) {e.printStackTrace();}return map;}

模拟post请求测试地址:http://coolaf.com/
此处我把本地的localhost通过内网穿透转换成一个外网地址,这样方便调用,具体如何调用可参考 Java web项目使用【内网穿透】来实现对外访问
测试效果如下:

数据库记录

GET请求

代码:

 /*** 获取数据库中的列表,get方式** @return*/@RequestMapping(value = "userList", method = RequestMethod.GET)@ResponseBodypublic Map<String, Object> userList() {out.println("welcome to userList");Map<String, Object> map = new HashMap<>();ResultBean result = onUserList();out.println("result==>" + result);map.put("code", result.getCode());map.put("reason", result.getReason());map.put("success", result.isSuccess());map.put("records", result.getRecords());return map;}

截图效果:

接收PC端上传文件

Spring MVC文件上传教程 commons-io/commons-uploadfile

 @RequestMapping(value = "/do", method = RequestMethod.POST)public String uploadDo(HttpServletRequest request, Model model, @RequestParam("file") MultipartFile[] files) {//获取目录/创建路径
//        String uploadRootPath = request.getServletContext().getRealPath("upload");String uploadRootPath = "/Users/liuxunming/Documents/AppService/Images/";//获取路径File uploadRootDir = new File(uploadRootPath);if (!uploadRootDir.exists()) {uploadRootDir.mkdirs();}//用来存放上传后的路径地址的变量List<File> uploadFiles = new ArrayList<File>();for (int i = 0; i < files.length; i++) {MultipartFile file = files[i];//原文件名String name = file.getOriginalFilename();System.out.print(name);if (name != null && name.length() > 0) {try {//获取文件字节流byte[] bytes = file.getBytes();//新文件路径File serverFile = new File(uploadRootDir.getAbsolutePath() + File.separator + name);//将文件字节流输出到刚创建的文件上BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));stream.write(bytes);stream.close();//将文件路径添加到uploadFiles中uploadFiles.add(serverFile);System.out.println(serverFile);} catch (IOException e) {// TODO Auto-generated catch block//e.printStackTrace();System.out.println("error to file:" + name);}}}model.addAttribute("uploadFiles", uploadFiles);return "uploadResult";}

接收Android端上传文件

springmvc服务端+android客户端的文件上传,此参考博文中不仅包括java端接收上传的代码,还包括Android端上传文件的代码

 /*** 手机端上传文件* */@Resourceprivate MobileResult mobileResult;@RequestMapping("/mobile/uploadfile")@ResponseBodypublic MobileResult uploadPhone(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request)throws IllegalStateException, IOException {String path = uploadFile(file, request);mobileResult.setCode("200");mobileResult.setPath(path);mobileResult.setMessage("上传成功");return mobileResult;}private String uploadFile(MultipartFile file, HttpServletRequest request) throws IOException {//        String path = request.getSession().getServletContext().getRealPath("upload");String path = "/Users/liuxunming/Documents/AppService/Images/";String fileName = file.getOriginalFilename();File targetFile = new File(path, fileName);if (!targetFile.exists()) {targetFile.mkdirs();}file.transferTo(targetFile);return targetFile.getAbsolutePath();}

问题

1、把项目代码导入到Intelj Idea里无法正常运行,一堆报错,都是程序包xxx不存在,根本原因就是maven本地库的配置有误

这里的local repository的目录一定要选择实际存在的,笔者之前是填的E:/MavenRepository,然而其实mac上根本没有E盘,后来直接改成默认的就好了

源码

https://github.com/xmliu/app-service-demo
各位在对该源码测试运行时,如果有什么问题,欢迎在博文留下评论或者在github提出issue

Java后台接口开发实战演练相关推荐

  1. AliPay - Java支付宝接口开发(三)

    一.前言 AliPay - Java支付宝接口开发(一) AliPay - Java支付宝接口开发(二) 二.支付宝沙箱环境集成Web项目 1.将支付宝Demo中的相关文件复制到我们的项目中 1.1 ...

  2. Java后台项目开发规范

    Java后台项目开发规范 写在前边 1.目标 2. 原则 一.命名规范 1.包命名规范 2.类命名规范[**UpperCamelCase命名法**] 2.1==如果在模块或者接口,类,方法中使用了设计 ...

  3. 分享一个JAVA专业接口开发利器,牛牛牛新鲜出炉!!!

    分享一个JAVA专业接口开发利器,集成在线接口文档 Swagger-ui,采用Jwt Token验证机制,最牛在于业务restful接口代码自动生成,更更牛的在接口可以做细化权限控制(例如:不同开发商 ...

  4. java小程序详解_微信小程序登录Java后台接口(详解,附示例代码)

    首先看一下官方文档 地址:微信小程序官方文档API登录接口 我们先对官方给的时序图进行简单的分析 1.当小程序调用wx.login()时,会获得一个code(临时登录凭证),然后我们需要用wx.req ...

  5. 亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(下)

    亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(下) 重要说明 本文章为亚马逊系列其中的一篇,具体详见 主页 中亚马逊分类 该系列项目均为[CSDN轻夏]原创,未经允许禁止转载 如有疑 ...

  6. 亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(中)

    亚马逊电商数据自动化管理接口平台JAVA SP-API接口开发(中) 重要说明 本文章为亚马逊系列其中的一篇,具体详见 主页 中亚马逊分类 该系列项目均为[CSDN轻夏]原创,未经允许禁止转载 如有疑 ...

  7. 微信小程序登录Java后台接口

    微信小程序登录java后台接口 首先看一下微信小程序的开发文档: 微信小程序开发文档 步骤: 小程序端向微信接口服务发送请求--wx.login():获取到登录临时凭证code 小程序端拿着获取到的c ...

  8. java微信接口开发java SpringMVC mybatis 后台框架

    获取[下载地址]   QQ: 313596790   [免费支持更新] 支持三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [ 新录针对本系统的视频教 ...

  9. 基于SpringBoot+Vue开发的前后端分离博客项目-Java后端接口开发

    文章目录 1. 前言 2. 新建Springboot项目 3. 整合mybatis plus 第一步:导依赖 第二步:写配置文件 第三步:mapper扫描+分页插件 第四步:代码生成配置 第五步:执行 ...

  10. java 微信自定义菜单 java微信接口开发 公众平台 SSM

    1.   权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限       角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限.       按钮权限: 给角色分配按钮权 ...

最新文章

  1. 基于图像的三维模型重建——相机模型与对极几何
  2. 一张图看Windows Store有多混乱 微软现在开始整治
  3. Oracle11g创建表空间
  4. 22_2D函数优化实例
  5. 关于百度地图 BMap.InfoWindow 只显示最后一条信息解决方法
  6. 软件测试 学习之路 linux 基础命令 (三)
  7. IPC 进程间通信方式——管道
  8. 5月16日亮相!华硕ZenFone 6新旗舰曝光:无刘海全面屏加持
  9. MongoDB 复制集节点增加移除及节点属性配置
  10. php漏洞书籍,PHP漏洞全解(一)-PHP网站的安全性问题
  11. Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了!
  12. 网管警惕:能突破网关限制的七大软件(转)
  13. 怎么打开优酷的kux格式?教你把kux转换成mp4的方法
  14. 贪心科技机器学习训练营(九)
  15. 调用Android原生裁剪方式裁剪图片并保存
  16. Github年度百大框架排行榜
  17. PDF文件如何修改,PDF如何旋转页面方向
  18. 测试iphone硬件好坏的软件,如何检测Apple手机硬件是否损坏
  19. 重磅!22张深度学习精炼图笔记总结!
  20. Android10的GPU呈现模式分析在哪?

热门文章

  1. linux pdf 编辑图层,PDF SDK DEMO
  2. MATLAB绘制地图超详细教程
  3. Qlocker勒索病毒 7Z勒索病毒 7Z压缩包密码破解
  4. UnityShader[3]屏幕后处理学习笔记
  5. 数据字典怎么写_做数据分析,我只会同环比,谁能教我怎么写结论?
  6. java for语句_Java for循环语句
  7. Stata:机制检验,如何判断是不是遮掩效应?
  8. 怎么调用html调色板,JS实现仿PS的调色板效果完整实例
  9. 修改IP4属性时,针对闪退问题的解决方法
  10. js 对象,json数组遍历