SpringBoot编写HTTP API

xiaoxiao2021-02-28  67

准备

基于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 可以下载代码中写的文件

转载请注明原文地址: https://www.6miu.com/read-84736.html

最新回复(0)