第一个webapi及swagger

Posted fuyujian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一个webapi及swagger相关的知识,希望对你有一定的参考价值。

目的:实现api并生成swagger文档

引入swagger

在pom.xml添加swagger依赖

 

 

<!--整合Swagger2配置类-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

启用swagger

#引入swagger
swagger:
  enabled: true

配置SwaggerConfiguration.java

新建文件,如下

 

 

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    /*@Value("${jwt.header}")
    private String tokenHeader;

    @Value("${jwt.token-start-with}")
    private String tokenStartWith;*/

    @Value("${swagger.enabled}")
    private Boolean enabled;



    @Value("${swagger2.basePackage:com.spingcloud.serviceconsumer.controller}")
    private String swagger2BasePackage;
    @Value("${swagger2.title:系统API文档}")
    private String swagger2Title;
    @Value("${swagger2.api.version:2.0}")
    private String apiVersion;




    // 定义分隔符
    private static final String splitor = ",";

    @Bean
    @SuppressWarnings("all")
    public Docket createRestApi() {
        ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        /*ticketPar.name(tokenHeader).description("token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .defaultValue(tokenStartWith + " ")
                .required(true)
                .build();
        pars.add(ticketPar.build());*/
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(enabled)
                .apiInfo(apiInfo())
                .select()
                .paths(Predicates.not(PathSelectors.regex("/error.*")))
                .paths(PathSelectors.any())
                .build()
                .globalOperationParameters(pars);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("eladmin 接口文档")
                .version("2.3")
                .build();
    }
}

开始处理控制器

建立如下结构

 

 解释:

service :具体业务实现

dto :模型

hello:接口实现

ihello:接口

代码如下:

base:

@Data
public class base {
    /*主键id*/
    @ApiModelProperty("主键id")
    @JsonProperty("id")
    private Integer id;

    /*public int getId(){
        return id;
    }
    public void SetId(int id){
        this.id=id;
    }*/
}
helloDto:
//swagger 注释
@ApiModel("模型说明")
//lombok插件并引用包 省区get  set 方法
/*@Data : 注解在类上, 为类提供读写属性, 此外还提供了 equals()、hashCode()、toString() 方法
@Getter/@Setter : 注解在类上, 为类提供读写属性
@ToString : 注解在类上, 为类提供 toString() 方法
@Slf4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象
@Log4j : 注解在类上, 为类提供一个属性名为 log 的 log4j 的日志对象*/

@Data
public class helloDto extends base implements Serializable {
    /*姓名*/
    @JsonProperty("Name")
    @ApiModelProperty("姓名")
    private String Name;
    /*性别*/
    @ApiModelProperty("性别")
    @JsonProperty("Sex")
    private Boolean Sex;

    /*@JsonProperty("Name")
    @ApiModelProperty("姓名")
    public String getName(){
        return this.Name;
    }
    public void setName(String Name){
        this.Name=Name;
    };

    public Boolean getSex(){
        return Sex;
    }
    public void setSex(Boolean Sex){
        this.Sex=Sex;
    }*/

}

 

没什么把set  get 注释掉了

说实话写这个东西太烦人了,不像net 只写{get;set;}就可以了,没有意义,有没有办法不用写,答案是肯定的

度娘搜索  maven  lombok

 

 

 

 选择的这个,没其他原因,用的人多  看usages

 

 复制到pom文件中

 安装 lombok 插件

 

 

 模型添加注解 @Data

 

 ok了,不用写get set了

 

ihello:

public interface IHello {

    /*获取所有*/
    List<helloDto> all();

    /*删除一条*/
    void del();

    /*按id查找*/
    helloDto findbyid(int id);

    /*添加*/
    boolean add(helloDto model);



}

hello:

@Service
public class Hello implements IHello {
    @Override
    public List<helloDto> all() {
        List<helloDto> list=new ArrayList<helloDto>();

        helloDto add1=new helloDto();
        add1.setSex(true);
        add1.setName("姓名");
        add1.setId(1);

        list.add(add1);

        return list;
    }

    @Override
    public void del() {

    }

    @Override
    public helloDto findbyid(int id) {
        return null;
    }

    @Override
    public boolean add(helloDto model) {
        return false;
    }
}

 

 

hellocontroller

@RestController
/*swagger注释*/
@Api(tags = "测试控制器")
@RequestMapping("/api/hello")
public class hellocontroller {

    private final IHello ihello;

    public hellocontroller(IHello ihello){
        this.ihello=ihello;

    }


    @RequestMapping(method = RequestMethod.GET)
    @ApiOperation("获取所有")
    public List<helloDto> all(){

        return ihello.all();
    }
    @RequestMapping(value = "/add",method = RequestMethod.POST)
    @ApiOperation("添加")
    public String add(@RequestBody helloDto m) throws Exception{
        boolean r=ihello.add(m);
        return r?"成功":"失败";
    }

    @RequestMapping(value = "/edit",method = RequestMethod.POST)
    @ApiOperation(value = "编辑",notes = "编辑操作")
    public helloDto edit(@RequestBody helloDto m) throws Exception{
        //boolean r=ihello.add(m);
        helloDto h=new helloDto();
        h.setId(0);
        h.setName("姓名");
        h.setSex(true);
        return h;
    }


}

好了,看下最终效果:

 

 

 

 

 参考文档:

SpringBoot+Swagger整合API

@RequestParam @RequestBody @PathVariable 等参数绑定注解详解(转)

application.properties文件配置

@RequestMapping 用法详解之地址映射(转)

@Component, @Repository, @Service的区别

 

在此感谢以上文章作者,感谢公司同事支持!

 

以上是关于第一个webapi及swagger的主要内容,如果未能解决你的问题,请参考以下文章

.Net Core小技巧 - Swagger适配虚拟目录及二级目录

.NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码

WebApi框架搭建集成Swagger

webapi使用swagger出现“Cannot read property 'parameters' of null”

Swagger UI 及Swashbuckle

MVC WebApi Swagger帮助文档 接口用法