SpringBoot编写HTTP API

准备

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

猜你喜欢

转载自blog.csdn.net/WillJGL/article/details/77773881