Swagger常用的幾個註解

實習期間,做一些練手項目,前後端分離以後測試成了問題,剛好接觸到這一款工具,完美的解決了前後端分離以後後端開發測試,剛好最近經常使用,於是整理了一些常見的註解。
Swagger幾種常見註解的瞭解:
@Api:
作用在類上,用來標註該類具體實現內容。表示標識這個類是swagger的資源 。
參數:
1.description:描述這個類的作用。
2.tags:設置這個類的一個標籤。
@ApiOperation:
用於發送一個請求,value可以加以說明
@ApiImplicitParam:
作用於參數:用於對參數進行操作
裏面含有的屬性包括以下幾種:

  1. name :參數名。(注意這個名字要與實際方法中的參數名一致,不然會導致swagger界面出現多個參數)
  2. value : 參數的具體意義,作用。
  3. required : 參數是否必填。
  4. dataType :參數的數據類型。
  5. paramType :查詢參數類型,這裏有幾種形式:
  6. 類型 作用
    path 以地址的形式提交數據
    query 直接跟參數完成自動映射賦值
    body 以流的形式提交 僅支持POST
    header 參數在request headers 裏邊提交
    form 以form表單的形式提交 僅支持POST

注意如果想要傳入一個對象類型的參數,不使用@ApiImplicitParam,然後在方法參數加上註解@RequestBody這樣就會使用json的形式發送參數
如果方法的參數中有一個對象,有一個普通參數,那麼只需要對普通參數類型註解@ApiImplicitParam即可,而對象類型和上面處理方法一樣

多個參數:@ApiImplicitParams
在註解裏面在包含多個@ApiImplicitParam註解,每個註解使用逗號隔開
@ApiParam
增加對參數的元信息說明
下面通過一個簡單項目中的代碼展示幾種常見的案例:(代碼只是一部分,不能執行,只是參考書寫格式即可)

package com.gwdl.csxt.control.modules.hire.resume.controller;

/**
 * @Auther: yxc
 * @Date: 2019/12/16
 * @Description:招聘模塊控制類
 */

import com.gwdl.csxt.control.common.base.constant.DataResult;
import com.gwdl.csxt.control.common.utils.DateUtils;
import com.gwdl.csxt.control.modules.hire.resume.controller.vo.ResumeVO;
import com.gwdl.csxt.control.modules.hire.resume.entity.EvaluationClass;
import com.gwdl.csxt.control.modules.hire.resume.entity.Resume;
import com.gwdl.csxt.control.modules.hire.resume.service.ResumeService;
import com.gwdl.csxt.control.modules.hire.resume.utils.StringToDate;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Api(tags = "招聘管理",description = "用於招聘模塊的測試")
@Controller(value = "/resume")
public class ResumeController {
    @Autowired
    private ResumeService resumeService;

    /**
     * 功能描述: 根據id查詢簡歷信息
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ApiOperation(value = "簡歷的查詢")
    @ApiImplicitParam(value = "根據簡歷id查詢唯一的一份簡歷", name = "resumeID", paramType = "query", dataType = "String")
    @RequestMapping(value="findResumeByID",method = RequestMethod.GET)
    @ResponseBody
    public DataResult findResume(String resumeID){
        //調用業務層代碼查詢
        Resume resume = resumeService.findResumeByID(resumeID);
        DataResult result=new DataResult();
        if(resume!=null){
            result.setStatus(0);
            result.setMsg("查詢成功");
            result.setData(resume);
            return result;
        }else{
            result.setMsg("無查詢用戶");
            result.setStatus(1);
            return result;
        }
    }

    /**
     * 功能描述: 查詢所有簡歷
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ApiOperation(value = "查詢所有簡歷")
    @ApiImplicitParam(value = "查詢參數",required = false)
    @RequestMapping(value="findAllResume",method = RequestMethod.GET)
    @ResponseBody
    public DataResult findAllResume(){
        DataResult result=new DataResult();
        List<Resume> allResume = resumeService.findAllResume();
        if(allResume!=null){
            result.setStatus(0);
            result.setMsg("查詢成功");
            result.setData(allResume);
            return result;
        }else{
            result.setStatus(1);
            result.setMsg("查詢數據失敗");
            return result;
        }
    }

    /**
     * 功能描述: 根據id刪除簡歷
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @RequestMapping(value="deleteResume",method = RequestMethod.GET)
    @ResponseBody
    @ApiOperation(value = "刪除簡歷")
    @ApiImplicitParam(value = "刪除簡歷", name = "resumeID", paramType = "query", dataType = "String")
    public DataResult deleteResume(String resumeID){
        DataResult result=new DataResult();
        int delete = resumeService.deleteResume(resumeID);
        if(delete==1){
            result.setMsg("刪除成功");
            result.setStatus(0);
            return result;
        }else{
            result.setMsg("刪除失敗");
            result.setStatus(1);
            return result;
        }
    }

    /**
     * 功能描述: 批量刪除
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/20
     */
    @ApiOperation(value = "批量刪除簡歷")
    @ApiImplicitParam(value = "批量刪除",name="resumeID",dataType = "String",paramType = "query",allowMultiple =true )
    @ResponseBody
    @RequestMapping(value = "deleteMany",method = RequestMethod.GET)
    public DataResult deleteMany(String[] resumeID){
        DataResult result=new DataResult();
        resumeService.deleteMany(resumeID);
        result.setStatus(0);
        result.setMsg("刪除成功");
        return result;
    }
    /**
     * 功能描述: 多條件查詢簡歷
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ResponseBody
    @RequestMapping(value="findResumeByCand",method = RequestMethod.POST)
    @ApiOperation(value = "多條件查詢")
    @ApiImplicitParams({
            @ApiImplicitParam(value="姓名",name="name",dataType="Stirng",paramType = "query"),
            @ApiImplicitParam(value="簡歷狀態",name="status",dataType="Stirng",paramType = "query"),
            @ApiImplicitParam(value="簡歷來源",name="source",dataType="Stirng",paramType = "query"),
            @ApiImplicitParam(value="開始時間",name="startTime",dataType="Stirng",paramType = "query"),
            @ApiImplicitParam(value="結束時間",name="endTime",dataType="Stirng",paramType = "query")
    })
    public DataResult findResumeByCand(String name,String status,String source,String startTime,String endTime){
        DataResult result=new DataResult();
        List<Resume> resumeByCand = resumeService.findResumeByCand(name,status,source, startTime, endTime);
        if(resumeByCand!=null){
            result.setMsg("成功");
            result.setStatus(0);
            result.setData(resumeByCand);
            return result;
        }else{
            result.setMsg("失敗");
            result.setStatus(1);
            return result;
        }
    }
    /**
     * 功能描述:新增簡歷
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ApiOperation(value = "新增簡歷")
    @ResponseBody
    @RequestMapping(value="insertResume",method = RequestMethod.POST)
    public DataResult insertResume(ResumeVO resumevo, HttpServletRequest request){
        //設置主鍵
        String s = UUID.randomUUID().toString();
        String replace = s.replace("-", "");
        resumevo.setResumeID(replace);
        //將時間格式轉爲可以插入數據庫的格式
        String birthday = request.getParameter("birthday");
        Date date = StringToDate.StringFormatDate(birthday);
        resumevo.setBirthday(date);
        DataResult result=new DataResult();
        int i = resumeService.insertResume(resumevo);
        if(i==1){
            result.setMsg("新增成功");
            result.setStatus(0);
            return result;
        }else{
            result.setStatus(1);
            result.setMsg("新增失敗");
            return result;
        }
    }


    /**
     * 功能描述: 更新簡歷
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ApiOperation(value = "更新簡歷")
    @ApiImplicitParam(value = "更新參數", name = "resumeID", paramType = "query",dataType = "String")
    @RequestMapping(value="updateResume",method = RequestMethod.POST)
    @ResponseBody
    public DataResult updateResume(@RequestBody ResumeVO resumevo, String resumeID){
        //前端獲取到的時間數據需要進行類型轉換
        DataResult dataResult=new DataResult();
        Date birthday = resumevo.getBirthday();
        String format = DateUtils.format(birthday, DateUtils.DATE_PATTERN);
        Date date = DateUtils.stringToDate(format, DateUtils.DATE_PATTERN);
        resumevo.setBirthday(date);
        int i = resumeService.updateResume(resumevo,resumeID);
        if(i==1){
            dataResult.setMsg("更新成功");
            dataResult.setStatus(1);
            dataResult.setData(resumevo);
            return dataResult;
        }else{
            dataResult.setMsg("更新失敗");
            dataResult.setStatus(0);
            return dataResult;
        }
    }
    /**
     * 功能描述:更新簡歷回顯數據
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/16
     */
    @ApiOperation(value = "更新簡歷回顯數據")
    @ApiImplicitParam(value = "更新簡歷id", name = "resumeID", paramType = "query",dataType = "String")
    @RequestMapping(value="updateResumeUI",method = RequestMethod.GET)
    @ResponseBody
    public DataResult updateResumeUI(String resumeID){
        DataResult result = findResume(resumeID);
        return result;
    }


    /**
     * 功能描述:查看審覈結果  評價
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/20
     */
    @RequestMapping(value="findRemark",method=RequestMethod.GET)
    @ResponseBody
    @ApiOperation("查看簡歷評價")
    @ApiImplicitParam(value = "簡歷評價",name="resumeID",paramType = "query",dataType = "String")
    public DataResult findRemark(String resumeID){
        Resume resume = resumeService.findResumeByID(resumeID);
        //簡歷
        EvaluationClass eva=new EvaluationClass();
        eva.setResumeID(resumeID);
        eva.setResumeNum(resume.getResumeNum());
        eva.setDescription(resume.getDescription());
        eva.setName(resume.getName());
        eva.setEvaluation(resume.getEvaluation());
        eva.setAuditorId(resume.getAuditorId());
        DataResult result=new DataResult();
        result.setData(eva);
        result.setMsg("成功");
        result.setStatus(1);
        return result;
    }
    /**
     * 功能描述: 文件上傳功能 上傳功能實現以後將文件的文件名保存到數據庫中
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/19
     */
    @ApiOperation(value="文件上傳")
    @ApiImplicitParam(value = "簡歷唯一ID",name="resumeID",dataType = "String",paramType = "query")
    @RequestMapping(value="uploadFile",consumes = "multipart/*",headers = "content-type=multipart/form-data",method = RequestMethod.POST)
    @ResponseBody
    public DataResult uploadFile(@ApiParam(value = "上傳文件",required = true) MultipartFile file, String resumeID,HttpServletRequest request)throws IOException{
        DataResult result=new DataResult();
        if(file.isEmpty()){
            result.setMsg("文件不能爲空");
            result.setStatus(1);
            return result;
        }
        //獲取文件名
        String fileName=file.getOriginalFilename();
        //獲取文件的後綴名 從後面往前截取
        String suffixName=fileName.substring(fileName.lastIndexOf("."));
        //輸入流位置
        String uploadFilePath= ResourceUtils.getURL("classpath:").getPath()+"uploadFile/";
        System.out.println(uploadFilePath);
        //下載文件路徑
        File dest=new File(uploadFilePath+fileName);
        //如果目錄不存在就新建一個
        if(!dest.getParentFile().exists()){
            dest.getParentFile().mkdirs();
        }
        file.transferTo(dest);
        //如果上傳成功的話就將文件名保存到數據庫中去
        int i = resumeService.updateResumeAttachmentAddress(fileName, resumeID);
        if(i==1){
            result.setMsg("上傳成功");
            result.setStatus(1);
            return result;
        }else{
            result.setMsg("文件上傳成功,但文件路徑沒有進入數據庫");
            result.setStatus(1);
            return result;
        }

    }

    /**
     * 功能描述: 文件的下載功能,首先獲取到數據庫中的附件名稱,然後實現下載功能
     * @auther: yxc
     * @return: null
     * @date: 2019/12/19
     */
    @ApiOperation(value="文件下載")
    @ApiImplicitParam(value="簡歷ID",name="resumeID",paramType = "query",dataType = "String")
    @RequestMapping(value="/downFile",method = RequestMethod.GET)
    @ResponseBody
    public DataResult downFile(String resumeID,HttpServletRequest request, HttpServletResponse response)throws Exception{
        DataResult result=new DataResult();
        Resume resume = resumeService.findResumeByID(resumeID);
        String fileName=resume.getResumeAttachmentAddress();
        System.out.println(fileName);
        if(fileName!=null){
            String realPath=ResourceUtils.getURL("classpath:").getPath()+"uploadFile/";
            File file=new File(realPath,fileName);
            if(file.exists()){
                response.setContentType("application/force-download");//設置下載不打開
                //設置文件的中文名稱亂碼問題
                fileName=new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
                response.addHeader("Content-Disposition",
                        "addachment;fileName="+fileName);//設置文件名
                byte[] buffer=new byte[1024];
                FileInputStream input=null;
                BufferedInputStream bufferInput=null;
                input=new FileInputStream(file);
                bufferInput=new BufferedInputStream(input);
                OutputStream out=response.getOutputStream();
                int i=input.read(buffer);
                while(i!=-1){
                    out.write(buffer,0,i);
                    i=input.read(buffer);
                }
                System.out.println("success");
                //關閉資源
                if(bufferInput!=null){
                    bufferInput.close();
                }
                if(input!=null){
                    input.close();
                }
                if(out!=null){
                    out.close();
                }
            }
        }
        result.setMsg("下載成功");
       return result;
    }

    /**
     * 功能描述: 文件在線瀏覽功能
     * @auther: yxc
     * @return: DataResult
     * @date: 2019/12/20
     */
    @RequestMapping(value="/openFile",method = RequestMethod.POST)
    @ApiOperation(value="在線瀏覽")
    @ApiImplicitParam(value="文件瀏覽",name="resumeID",dataType = "String",paramType = "query")
    public void openFile(String resumeID,HttpServletRequest request) throws Exception {
        //首先查詢到簡歷
        Resume resume = resumeService.findResumeByID(resumeID);
        //獲取附件的名稱
        String fileName=resume.getResumeAttachmentAddress();
        String uploadFilePath= ResourceUtils.getURL("classpath:").getPath()+"uploadFile/";
        System.out.println(uploadFilePath+fileName);
        //調用程序打開文件
        String cmd="rundll32 url.dll FileProtocolHandler file://"+uploadFilePath+fileName;
        Runtime runtime=Runtime.getRuntime();
        runtime.exec(cmd);

    }

}

上面實現了一些常見方法的swagger測試,如傳進的參數多個怎麼處理,是一個對象怎麼處理,是集合數組怎麼處理,是文件怎麼處理。寫的不是很完善,還有很多其他的功能沒有使用起來。但最常見的使用基本包含,需要擴展的可以查看更多的資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章