基于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 { }1、建立接口方法
/** * Get方法测试 * @return */ @GetMapping("/gettest") public ResponseBase getTest() { ResponseBase rb =new ResponseBase(); rb.setMessage("getTest"); return rb; }2、运行api项目,使用postman测试接口
接口收到get请求,并返回了json回复
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回复
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个参数
编写测试方法
/** * 测试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内容 * @param testHeader * @return */ @PostMapping("/headertest") public ResponseBase headerTest(@RequestHeader(value="TestHeader") String testHeader) { ResponseBase rb =new ResponseBase(); rb.setMessage("testHeader="+testHeader); return rb; }测试接口方法
正常获取到了header内容
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上传)
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 可以下载代码中写的文件
