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