SpringBoot编写HTTP API
来源:互联网 发布:2016最新搞笑网络歌曲 编辑:程序博客网 时间:2024/06/05 09:18
准备
基于IDEA创建多个模块MavenSpringBoot项目这里面创建的项目继续进行http接口开发
HTTP API一般接收客户端的get和post请求,然后进行业务逻辑操作,再将结果以json的格式返回
先在utils项目中建立实体类定义,在utils项目下建立model包,再建立responsebase类作为接口返回的基类
public class ResponseBase { String message; int code; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public int getCode() { return code; } public void setCode(int code) { this.code = code; }}
再在api项目的controller包中新建类
首先在类上写下面这两个注解
@RestController 注解相当于@ResponseBody + @Controller合在一起的作用
@RequestMapping标注了映射地址,放到类上表示跟地址
@RestController@RequestMapping("/httpapi")public class HttpApiController {}
Get接口
1、建立接口方法
/** * Get方法测试 * @return */ @GetMapping("/gettest") public ResponseBase getTest() { ResponseBase rb =new ResponseBase(); rb.setMessage("getTest"); return rb; }
2、运行api项目,使用postman测试接口
接口收到get请求,并返回了json回复
Post接口
1、先在utils的model包中建立RequestBase类用于接收请求体
public class RequestBase { public String getRequestID() { return requestID; } public void setRequestID(String requestID) { this.requestID = requestID; } String requestID;}
2、在api项目的HttpApiController 中建立post接口方法
/** * 测试Post接口 * @param requesst * @return */ @PostMapping("/posttest") public ResponseBase update(@RequestBody RequestBase requesst) { ResponseBase rb =new ResponseBase(); rb.setMessage("收到的requestID="+requesst.getRequestID()); return rb; }
3、运行API项目,使用postman测试该接口
接口接收到了POST请求,解析出来了post的请求体,并且返回了json回复
URL传参数
单个参数
1、建立接口方法
@GetMapping("/getparam") public ResponseBase getParam(@RequestParam(name = "id", required = false, defaultValue = "0") int id) { ResponseBase rb =new ResponseBase(); rb.setMessage("id="+String.valueOf(id)); return rb; }
2、运行api项目,访问接口方法
可以看到正常返回了请求时带的参数ID
多个参数
1、建立接口方法
/** * 测试多个url参数 * @param id * @param name * @return */ @GetMapping("/getparam2") public ResponseBase getParam2(@RequestParam(name = "id", required = false, defaultValue = "0") int id,@RequestParam(name = "name", required = false, defaultValue = "0") String name) { ResponseBase rb =new ResponseBase(); rb.setMessage("id="+String.valueOf(id)+" name="+name); return rb; }
2、访问接口方法
成功接收了2个参数
URL路径传参数(动态URL)
单参数
编写测试方法
/** * 测试PathVariable * @param id * @return */ @GetMapping("/pathvariable/id/{id}") public ResponseBase pathvariable(@PathVariable int id) { ResponseBase rb =new ResponseBase(); rb.setMessage("id="+String.valueOf(id)); return rb; }
postman访问测试方法
返回了路径参数
多参数
编写接口方法
/** * 测试多个PathVariable * @param id * @param name * @return */ @GetMapping("/pathvariable2/id/{id}/name/{name}") public ResponseBase pathvariable2(@PathVariable int id,@PathVariable String name) { ResponseBase rb =new ResponseBase(); rb.setMessage("id="+String.valueOf(id)+" name="+name); return rb; }
测试接口方法
成功获取了2个参数
获取Header内容
编写接口方法
/** * 获取Header内容 * @param testHeader * @return */ @PostMapping("/headertest") public ResponseBase headerTest(@RequestHeader(value="TestHeader") String testHeader) { ResponseBase rb =new ResponseBase(); rb.setMessage("testHeader="+testHeader); return rb; }
测试接口方法
正常获取到了header内容
上传文件
File Upload
1、先定义保存路径和ResourceLoader
public static final String ROOT = "C:\\www\\upload-dir"; private final ResourceLoader resourceLoader;
2、构造函数初始化ResourceLoader
public HttpApiController(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; }
3、编写文件上传方法
/** * 文件上传的方法 * @param file * @param redirectAttributes * @param request * @return * @throws IOException */ @PostMapping("/fileupload") public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes, HttpServletRequest request) throws IOException { System.out.println("handleFileUpload"); if (!file.isEmpty()) { try { File dir = new File(ROOT); if (!dir.exists()) { dir.mkdir(); } Path path = Paths.get(ROOT, file.getOriginalFilename()); Files.copy(file.getInputStream(), path); return "You successfully uploaded " + file.getOriginalFilename() + "!"; } catch (IOException | RuntimeException e) { return "IOException to upload " + file.getOriginalFilename() + " => " + e.toString(); } } else { return "Failed to upload " + file.getOriginalFilename() + " because it was empty"; } }
4、postman测试上传文件(web上传)
Byte Upload
1、编写Byte上传方法
/** *数据上传 * @param request * @return * @throws IOException */ @PostMapping("/byteupload") public String handleByteUpload(HttpServletRequest request) throws IOException { System.out.println("byteupload"); File dir = new File(ROOT); if (!dir.exists()) { dir.mkdir(); } Path path = Paths.get(ROOT, "temp.jpg"); if (Files.exists(path)) { Files.delete(path); } Files.copy(request.getInputStream(), path); return "byteupload"; }
2、Postman测试
下载文件
1、编写下载文件方法
@GetMapping(value = "/download") public void download(HttpServletResponse res) { String fileName = "temp.jpg"; res.setHeader("content-type", "application/octet-stream"); res.setContentType("application/octet-stream"); res.setHeader("Content-Disposition", "attachment;filename=" + fileName); byte[] buff = new byte[1024]; BufferedInputStream bis = null; OutputStream os = null; try { os = res.getOutputStream(); bis = new BufferedInputStream(new FileInputStream(new File(ROOT +"\\"+ fileName))); int i = bis.read(buff); while (i != -1) { os.write(buff, 0, buff.length); os.flush(); i = bis.read(buff); } } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("success"); }
2、测试
在浏览器中访问
http://localhost:8080/httpapi/download
可以下载代码中写的文件
- SpringBoot编写HTTP API
- 使用Jfinal编写的HTTP API应用脚手架项目
- springboot servlet-api问题
- SpringBoot Rest-api开发
- SpringBoot 自动生成API文档
- springboot使用feign访问api
- SpringBoot启动的http异常
- springboot+undertow+http+https+http2
- api 编写 listview(ListControl)
- 五子棋(API编写)
- bcb编写api
- C# 编写Web API
- app开发-api编写
- subversionedge rest api编写
- RESTful API 编写指南
- RESTful API 编写规范
- 编写restful api
- rest api的编写
- mybatis和hibernate的区别
- 使用formData对象提交表单并上传图片
- go 安装 protobuf proto3
- RTMP协议播放流程的实现及抓包分析
- Android——ViewPager
- SpringBoot编写HTTP API
- [转]图像梯度:算子
- leetcode 240 查询一个排序好的矩阵中是否存在target
- ubuntu16.04安装caffe cpu版
- 猫抓老鼠--实验吧
- 从1到n整数中1出现的次数
- Oracle 模糊查询方法
- 大数乘法以及大数的存储问题
- Visual Studio 中F10和F11调试的区别