目录
配置准备
pom文件中添加依赖:
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
添加配置类,命名SwaggerConfig
添加如下代码
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)).build();
}
}
简单示例
添加SwaggerController类,
添加如下代码
@Api(description = "Swagger接口")
@RestController
@RequestMapping("/swagger")
public class SwaggerController {
/**
* 商品service
*/
@Autowired
private GoodsService goodsService;
@ApiOperation(value = "查询商品", notes = "查询商品")
@ApiImplicitParams({
@ApiImplicitParam(name = "goodsId", value = "商品编码", required = true, paramType = "query", dataType = "String")
})
@RequestMapping(value = "/listGoods", method = RequestMethod.GET)
public GoodsDO listGoods(@RequestParam("goodsId") String id) {
Integer queryId = Integer.valueOf(id);
GoodsDO goodsDO = goodsService.getById(queryId);
System.out.println("print result***");
System.out.println(goodsDO);
return goodsDO;
}
}
编译运行,打开http://localhost:8080/swagger-ui.html#/
至此,简单的swagger应用实例完成
增删改的使用
在controller层SwaggerController中继续添加增删改三个方法,代码为:
@ApiOperation(value = "新增", notes = "新增")
@RequestMapping(value = "/create", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public void addGoods(@RequestBody GoodsDO goodsDO) {
goodsService.addRecord(goodsDO);
}
@ApiOperation(value = "修改", notes = "修改")
@RequestMapping(value = "/update", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public void update(@RequestBody ModifyParam modifyParam) {
GoodsDO goods = GoodsTranslator.transParamToDO(modifyParam);
GoodsDO goodsDO = GoodsTranslator.translatorWithFastJson(modifyParam);
System.out.println("update:::");
goodsService.modifyRecord(goodsDO);
}
@ApiOperation(value = "删除", notes = "删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "goodsId", value = "标识", required = true, paramType = "query", dataType = "String")
})
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
public void delete(@RequestParam("goodsId") String goodsId) {
System.out.println("delete:::" + goodsId);
GoodsDO goodsDO = new GoodsDO();
goodsDO.setId(Integer.valueOf(goodsId));
goodsService.deleteRecord(goodsDO);
}
刷新 http://localhost:8080/swagger-ui.html#/
新增一个商品记录:
数据库新增后
修改一条记录
修改后数据库中的记录
添加参数说明
在controller中另建一个param文件夹用于放置各个查询参数、修改参数的实体,通过添加说明在swagger中显示各个参数的意义。
1. 新建一个ModifyParam类
2. 添加如下代码
@ApiModel("规则查询参数")
public class ModifyParam {
@ApiModelProperty("id")
private Integer id;
@ApiModelProperty("编码")
private Long code;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("条形码")
private String barcode;
@ApiModelProperty("价格")
private BigDecimal price;
@ApiModelProperty("库存数量")
private Long stock;
}
3. 修改controller中更新方法的代码,这里的转换在下一小节中
@ApiOperation(value = "修改", notes = "修改")
@RequestMapping(value = "/update", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public void update(@RequestBody ModifyParam modifyParam) {
GoodsDO goods = GoodsTranslator.transParamToDO(modifyParam);
GoodsDO goodsDO = GoodsTranslator.translatorWithFastJson(modifyParam);
System.out.println("update:::");
goodsService.modifyRecord(goodsDO);
}
4. 刷新swagger,查看更新方法
在Models中可以看到相关实体
getter,setter的使用
在实体类中,根据需要会写大量的get,set方法,为避免重复操作,简化代码,可以使用相关插件,使实体类自动生成相关get,set方法。
1. pom添加依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
2. 安装插件:Settings->Plugins->Browse Repositories中安装Lombok重启IDEA
3. 重新编译后在target的相关class文件中可以看到生成了get,set方法
Translator转换
在controller接收传入参数的时候,或者将查询的结果封装成VO,DTO形式返回时,通常需要进行一些转换。可利用阿里的fastjson进行快速转换。fastjson可学习https://github.com/alibaba/fastjson
1. 添加pom依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
2. 在controller层新建两个转换类,商品转换类和通用转换类
3. 商品转换类GoodsTranslator代码:
/**
* @Author: windmill
* @Description:商品转换类
* @Date: 2019/4/2 19:32
*/
public class GoodsTranslator {
/**
* 将修改参数转DO
*
* @param modifyParam
* @return
*/
public static GoodsDO transParamToDO(ModifyParam modifyParam) {
GoodsDO goodsDO = new GoodsDO();
goodsDO.setId(modifyParam.getId());
goodsDO.setBarcode(modifyParam.getBarcode());
goodsDO.setCode(modifyParam.getCode());
goodsDO.setName(modifyParam.getName());
goodsDO.setPrice(modifyParam.getPrice());
goodsDO.setStock(modifyParam.getStock());
return goodsDO;
}
/**
* 通过 fastjson 将修改参数转换为DO
*
* @param modifyParam
* @return
*/
public static GoodsDO translatorWithFastJson(ModifyParam modifyParam) {
return JSON.parseObject(JSON.toJSONString(modifyParam), GoodsDO.class);
}
}
上述两种转换方法,一种是利用get,set手动转换,另一中则通过利用fastjson快速转换
4. 通用转换类,提供单个对象转换和列表转换
**
* @Author: windmill
* @Description:通过fastjson对目标对象或对象列表进行转换
* @Date: 2019/4/2 19:42
*/
public class CommonTranslator {
/**
* Fastjson单个对象转换
*
* @param source 要转换的对象
* @param target 转换后的目标对象
* @param <T> 对象模板类型
* @return 返回JSON转换的匹配对象
*/
public static <T> T translator(Object source, Class<T> target) {
return JSON.parseObject(JSON.toJSONString(source), target);
}
/**
* 通过fastjson进行列表转换
*
* @param objectList 转换对象的列表集合
* @param target 转换后的目标对象集合
* @param <T>
* @return 返回转换后对象的匹配集合
*/
public static <T> List<T> listTranslator(List objectList, Class<T> target) {
List<T> tList = new ArrayList();
objectList.forEach((object) -> {
T t = JSON.parseObject(JSON.toJSONString(object), target);
tList.add(t);
});
return tList;
}
}