• 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对接口有入侵,使用需谨慎。

  • 相关阅读:
    Memcached 测试
    Task WaitAll的用法
    Linux Memcached 安装
    开发常用的一些插件
    转:浅析VO、DTO、DO、PO的概念、区别和用处
    转:数据库的快照隔离级别(Snapshot Isolation)
    转:nolock的替代方案-提交读快照隔离[行版本控制]
    转:介绍一个好用的抓取dump的工具-ProcDump
    把sqlserver查询结果复制到Excel出现数据记录遗漏
    ASP.NET_SessionId 不相同导致验证码出错
  • 原文地址:https://www.cnblogs.com/yuhuameng/p/8508937.html
Copyright © 2020-2023  润新知