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

原创粉丝点击