• SpringBoot集成Swagger2实现Restful(类型转换错误解决办法)


    1.pom.xml增加依赖包

     <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.2.2</version>
      </dependency>
      <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.2.2</version>
      </dependency>

    2.编写swapper2配置类

    package com.zyank;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    @Configuration
    @EnableSwagger2
    public class Swagger2 {
      @Bean
      public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.zyank.web"))
            .paths(PathSelectors.any())
            .build();
      }
      private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
            .title("Spring Boot中试用Swagger2构建的RESTful APIs")
            .description("更多Spring Boot相关文章请关注:http://blog.didispace.com/")
            .termsOfServiceUrl("http://blog.didispace.com/")
            .contact("leo")
            .version("1.0")
            .build();
      }
    }

    3.启动springboot,访问http://localhost:8081/swagger-ui.html
    会发现页面显示报错:

    后台报错:

    2017-07-02 15:56:51.988 WARN 7176 --- [ qtp20577666-17] o.s.web.servlet.PageNotFound : No mapping found for HTTP request with URI [/swagger-ui.html] in DispatcherServlet with name 'dispatcherServlet'

    想一下swagger-ui.html 是在springfox-swagger-ui.jar里的


    如何才能让我们能访问到swagger-ui.html???
    【百度到,MARK  http://www.jianshu.com/p/840320d431a1】

    Spring Boot自动配置本身不会自动把/swagger-ui.html这个路径映射到对应的目录META-INF/resources/下面。我们加上这个映射即可。

    复制代码
    复制代码
    /** 
     * <Description> <br> 
     *  
     * @author luoluocaihong<br>
     * @version 1.0<br>
     * @taskId <br>
     * @CreateDate Jul 2, 2017 <br>
     * @since V8.0<br>
     * @see XXXX <br>
     */
    @Configuration
    public class WebMVCConfig extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");

              registry.addResourceHandler("/webjars/**")
                     .addResourceLocations("classpath:/META-INF/resources/webjars/");

        }
    
    }
    复制代码
    复制代码

    再次启动springboot,访问http://localhost:8081/swagger-ui.html,OK:

    4. Controller内使用

    package com.zyank.web;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    import com.zyank.domain.User;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    @RestController
    @RequestMapping(value="/users")
    public class UserContrller {
      static Map<Long, User> users=Collections.synchronizedMap(new HashMap<Long,User>());
      @ApiOperation(value="获取用户列表",notes="")
      @RequestMapping(value={""},method=RequestMethod.GET)
      public List<User> getUserList(){
        List<User> r=new ArrayList<User>(users.values());
        return r;    
      }
       @ApiOperation(value="创建用户", notes="根据User对象创建用户")
        @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
        @RequestMapping(value="", method=RequestMethod.POST)
        public String postUser(@RequestBody User user) {
          users.put(user.getId(), user);
          return "success";
        }
        @ApiOperation(value="获取用户详细信息", notes="根据url的id来获取用户详细信息")
        @ApiImplicitParam(name = "id", value = "用户ID", required = true, paramType="path", dataType = "Long")
        @RequestMapping(value="/{id}", method=RequestMethod.GET)
        public User getUser(@PathVariable Long id) {
          return users.get(id);
        }
        @ApiOperation(value="更新用户详细信息", notes="根据url的id来指定更新对象,并根据传过来的user信息来更新用户详细信息")
        @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "用户ID", required = true, paramType="path", dataType = "Long"),
            @ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")
        })
        @RequestMapping(value="/{id}", method=RequestMethod.PUT)
        public String putUser(@PathVariable Long id, @RequestBody User user) {
          User u = users.get(id);
          u.setName(user.getName());
          u.setAge(user.getAge());
          users.put(id, u);
          return "success";
        }
        @ApiOperation(value="删除用户", notes="根据url的id来指定删除对象")
        @ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long")
        @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
        public String deleteUser(@PathVariable Long id) {
          users.remove(id);
          return "success";
        }
    }

    如果上诉代码没有写paramType = “path” 会提示类型转换String convert to Long错误。

    由此看来,springboot集成Swagger2对接口有入侵,使用需谨慎。

  • 相关阅读:
    第12课:HTML基础之DOM操作1
    第12课:HTML+CSS的基础用法
    selenium对应三大浏览器(谷歌、火狐、IE)驱动安装
    windows下查看端口是否被占,以及端口被哪个程序占用
    windows下jenkins安装过程中的那些坑
    数据库命令大全
    机器学习总结之逻辑回归Logistic Regression
    Longest Substring Without Repeating Characters
    ffmpeg常见命令
    KNN及其改进算法的python实现
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/8508937.html
Copyright © 2020-2023  润新知