實習期間,做一些練手項目,前後端分離以後測試成了問題,剛好接觸到這一款工具,完美的解決了前後端分離以後後端開發測試,剛好最近經常使用,於是整理了一些常見的註解。
Swagger幾種常見註解的瞭解:
@Api:
作用在類上,用來標註該類具體實現內容。表示標識這個類是swagger的資源 。
參數:
1.description:描述這個類的作用。
2.tags:設置這個類的一個標籤。
@ApiOperation:
用於發送一個請求,value可以加以說明
@ApiImplicitParam:
作用於參數:用於對參數進行操作
裏面含有的屬性包括以下幾種:
- name :參數名。(注意這個名字要與實際方法中的參數名一致,不然會導致swagger界面出現多個參數)
- value : 參數的具體意義,作用。
- required : 參數是否必填。
- dataType :參數的數據類型。
- paramType :查詢參數類型,這裏有幾種形式:
- 類型 作用
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測試,如傳進的參數多個怎麼處理,是一個對象怎麼處理,是集合數組怎麼處理,是文件怎麼處理。寫的不是很完善,還有很多其他的功能沒有使用起來。但最常見的使用基本包含,需要擴展的可以查看更多的資料。