但是没有集成mybatis金沙js娱乐场官方网站:,ui资源目录冲突问题

ui资源目录冲突问题,解决资源系统资源目录与swagger,非springboot框架需要引入注解@EnableWebMvc,扫描指定包中的swagger注解,引入了两个jar,– 使用数据源 –&gt,所以想要使用mybatis就要自己去集成,将dist下所有内容拷贝到本地项目webapp下面, 

金沙js娱乐场官方网站 18

Swagger2在SpringBoot景况下的利用

集成步骤

第四章 springboot + swagger,springbootswagger

注:本文参照他事他说加以考察自

 

swagger用于定义API文档。

好处:

  • 前后端分离开垦
  • API文书档案特别醒目
  • 测量试验的时候不需求再采纳UPRADOL输入浏览器的主意来探望Controller
  • 金钱观的输入U奥迪Q7L的测量试验办法对于post须要的传参比较费心(当然,能够选用postman那样的浏览器插件卡塔尔国
  • spring-boot与swagger的融会轻便的后生可畏逼

1、项目布局

和上意气风发节同样,未有变动。

2、pom.xml

引入了八个jar。

金沙js娱乐场官方网站 1 1
<dependency> 2 <groupId>io.springfox</groupId> 3
<artifactId>springfox-swagger2</artifactId> 4
<version>2.2.2</version> 5 </dependency> 6
<dependency> 7 <groupId>io.springfox</groupId> 8
<artifactId>springfox-swagger-ui</artifactId> 9
<version>2.2.2</version> 10 </dependency> View Code

3、Application.java

金沙js娱乐场官方网站 2 1 package
com.xxx.firstboot; 2 3 import
org.springframework.boot.SpringApplication; 4 import
org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 import
springfox.documentation.swagger2.annotations.EnableSwagger2; 7 8
@SpringBootApplication //same as
@[email protected][email protected]
9 @EnableSwagger2 //启动swagger注解 10 public class Application { 11 12
public static void main(String[] args) { 13
SpringApplication.run(Application.class, args); 14 } 15 16 } View Code

说明:

  • 引进了三个注明@EnableSwagger2来运营swagger表明。(运营该注明使得用在controller中的swagger申明生效,覆盖的界定由@ComponentScan的布局来钦点,这里暗中认可钦定为根路径”com.xxx.firstboot”下的有所controller卡塔 尔(阿拉伯语:قطر‎

4、UserController.java

金沙js娱乐场官方网站 3 1 package
com.xxx.firstboot.web; 2 3 import
org.springframework.beans.factory.annotation.Autowired; 4 import
org.springframework.web.bind.annotation.RequestHeader; 5 import
org.springframework.web.bind.annotation.RequestMapping; 6 import
org.springframework.web.bind.annotation.RequestMethod; 7 import
org.springframework.web.bind.annotation.RequestParam; 8 import
org.springframework.web.bind.annotation.RestController; 9 10 import
com.xxx.firstboot.domain.User; 11 import
com.xxx.firstboot.service.UserService; 12 13 import
io.swagger.annotations.Api; 14 import
io.swagger.annotations.ApiImplicitParam; 15 import
io.swagger.annotations.ApiImplicitParams; 16 import
io.swagger.annotations.ApiOperation; 17 import
io.swagger.annotations.ApiResponse; 18 import
io.swagger.annotations.ApiResponses; 19 20 @RestController 21
@RequestMapping(“/user”) 22 @Api(“userController相关api”) 23 public
class UserController { 24 25 @Autowired 26 private UserServiceuserService; 27 28 // @Autowired 29 // private MyRedisTemplate
myRedisTemplate; 30 31 @ApiOperation(“获取客户消息”) 32
@ApiImplicitParams({ 33
@ApiImplicitParam(paramType=”header”,name=”username”,dataType=”String”,required=true,value=”顾客的人名”,defaultValue=”zhaojigang”),
34
@ApiImplicitParam(paramType=”query”,name=”password”,dataType=”String”,required=true,value=”顾客的密码”,defaultValue=”wangna”)
35 }) 36 @ApiResponses({ 37
@ApiResponse(code=400,message=”供给参数没填好”), 38
@ApiResponse(code=404,message=”央浼路线未有或页面跳转路线不对”) 39 }) 40
@RequestMapping(value=”/getUser”,method=RequestMethod.GET) 41 public
User getUser(@RequestHeader(“username”) String username,
@RequestParam(“password”) String password) { 42 return
userService.getUser(username,password); 43 } 44 45 //
@RequestMapping(“/testJedisCluster”) 46 // public User
testJedisCluster(@RequestParam(“username”) String username){ 47 //
String value =
myRedisTemplate.get(MyConstants.USE冠道_FORWARD_CACHE_PREFIX, username);
48 // if(StringUtils.isBlank(value)){ 49 //
myRedisTemplate.set(MyConstants.USER_FORWARD_CACHE_PREFIX, username,
JSON.toJSONString(getUser())); 50 // return null; 51 // } 52 // return
JSON.parseObject(value, User.class); 53 // } 54 55 } View Code

说明:

  • @Api:用在类上,说明该类的功用
  • @ApiOperation:用在措施上,表达方法的作用
  • @ApiImplicitParams:用在点子上含蓄意气风发组参数表明
  • @ApiImplicitParam:用在@ApiImplicitParams评释中,钦命多个号令参数的各样方面
    • paramType:参数放在哪个地点
      • header–>央浼参数的得到:@RequestHeader
      • query–>央浼参数的获取:@RequestParam
      • path(用于restful接口卡塔 尔(阿拉伯语:قطر‎–>央浼参数的得到:@PathVariable
      • body(不常用)
      • form(不常用)
    • name:参数名
    • dataType:参数类型
    • required:参数是或不是必得传
    • value:参数的情趣
    • defaultValue:参数的暗许值
  • @ApiResponses:用于表示风华正茂组响应
  • @ApiResponse:用在@ApiResponses中,平日用于表达一个荒谬的响应消息
    • code:数字,例如400
    • message:新闻,举例”央求参数没填好”
    • response:抛出非常的类

如上那么些正是最常用的多少个表明了。

现实别的的注释,查看:

 

测试:

运转服务,浏览器输入””

金沙js娱乐场官方网站 4

最上边二个红框:@Api

GET红框:method=RequestMethod.GET

左侧红框:@ApiOperation

parameter红框:@ApiImplicitParams类别评释

response messages红框:@ApiResponses类别注脚

输入参数后,点击”try it out!”,查看响应内容:

金沙js娱乐场官方网站 5

 

springboot + swagger,springbootswagger
注:本文参照他事他说加以考察自
swagger用于定义API文档。 好处: 前后端分离开垦 API文书档案…

第五章 springboot + mybatis,springbootmybatis

springboot集成了springJDBC与JPA,不过未有集成mybatis,所以想要使用mybatis将在和谐去集成。集成方式格外轻便。

1、项目协会

金沙js娱乐场官方网站 6

 

2、pom.xml

金沙js娱乐场官方网站 7 1 <!–
与数据库操作相关的凭借 –> 2 <dependency> 3
<groupId>org.springframework.boot</groupId> 4
<artifactId>spring-boot-starter-jdbc</artifactId> 5
</dependency> 6 7 <!– 使用数据源 –> 8 <dependency> 9
<groupId>com.alibaba</groupId> 10
<artifactId>druid</artifactId> 11
<version>1.0.14</version> 12 </dependency> 13 14
<!– mysql –> 15 <dependency> 16
<groupId>mysql</groupId> 17
<artifactId>mysql-connector-java</artifactId> 18
<scope>runtime</scope> 19 </dependency> 20 21 <!–
mybatis –> 22 <dependency> 23
<groupId>org.mybatis</groupId> 24
<artifactId>mybatis</artifactId> 25
<version>3.2.8</version> 26 </dependency> 27
<dependency> 28 <groupId>org.mybatis</groupId> 29
<artifactId>mybatis-spring</artifactId> 30
<version>1.2.2</version> 31 </dependency> View Code

说明:

  • spring-boot-starter-jdbc:引进与数据库操作相关的注重,举例daoSupport等

  • druid:阿里Baba(Alibaba卡塔 尔(英语:State of Qatar)的数据源

  • mysql-connector-java:mysql连接jar,scope为runtime
  • mybatis + mybatis-spring:mybatis相关jar

 

3、application.properties

金沙js娱乐场官方网站 81
jdbc.driverClassName = com.mysql.jdbc.Driver 2 jdbc.url =
jdbc:mysql://xxx:3306/mytestdb?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
3 jdbc.username = root 4 jdbc.password = vvvxxx 5 6
mybatis.typeAliasesPackage=com.xxx.firstboot.domain 7
mybatis.mapperLocations=classpath:mapper/*.xml View Code

说明:

  • mybatis.typeAliasesPackage:钦定domain类的基包,即钦点其在*Mapper.xml文件中能够动用简名来代表全类名(看后面的UserMapper.xml介绍卡塔尔
  • mybatis.mapperLocations:指定*Mapper.xml的位置

 

4、com.xxx.firstboot.common.MyBatisConfig

成效:mybatis与springboot集成的输入

金沙js娱乐场官方网站 9 1 package
com.xxx.firstboot.common; 2 3 import java.util.Properties; 4 5 import
javax.sql.DataSource; 6 7 import
org.apache.ibatis.session.SqlSessionFactory; 8 import
org.mybatis.spring.SqlSessionFactoryBean; 9 import
org.mybatis.spring.annotation.MapperScan; 10 import
org.springframework.beans.factory.annotation.Autowired; 11 import
org.springframework.context.annotation.Bean; 12 import
org.springframework.context.annotation.Configuration; 13 import
org.springframework.core.env.Environment; 14 import
org.springframework.core.io.support.PathMatchingResourcePatternResolver;
15 16 import com.alibaba.druid.pool.DruidDataSourceFactory; 17 18 /**
19 * springboot集成mybatis的主干入口 20 * 1卡塔 尔(英语:State of Qatar)创造数量源 21 *
2)创建SqlSessionFactory 22 */ 23 @Configuration
//该申明形似于spring配置文件 24
@MapperScan(basePackages=”com.xxx.firstboot.mapper”) 25 public class
MyBatisConfig { 26 27 @Autowired 28 private Environment env; 29 30 /**
31 * 创建数量源 32 * @Primary
该注利水示在同多少个接口有多少个落到实处类能够注入的时候,暗中认可选项哪一个,并不是让@autowire评释报错
33 */ 34 @Bean 35 //@Primary 36 public DataSource getDataSource()
throws Exception{ 37 Properties props = new Properties(); 38
props.put(“driverClassName”, env.getProperty(“jdbc.driverClassName”));
39 props.put(“url”, env.getProperty(“jdbc.url”)); 40
props.put(“username”, env.getProperty(“jdbc.username”)); 41
props.put(“password”, env.getProperty(“jdbc.password”)); 42 return
DruidDataSourceFactory.createDataSource(props); 43 } 44 45 /** 46 *
依据数据源创立SqlSessionFactory 47 */ 48 @Bean 49 public
SqlSessionFactory sqlSessionFactory(DataSource ds) throws Exception{ 50
SqlSessionFactoryBean fb = new SqlSessionFactoryBean(); 51
fb.setDataSource(ds);//钦命数据源(那些必得有,不然报错) 52
//下面两句仅仅用于*.xml文件,如若一切漫长层操作不须要接收到xml文件的话(只用表明就足以化解卡塔 尔(英语:State of Qatar),则不加
53
fb.setTypeAliasesPackage(env.getProperty(“mybatis.typeAliasesPackage”));//内定基包
54 fb.setMapperLocations(new
PathMatchingResourcePatternResolver().getResources(env.getProperty(“mybatis.mapperLocations”)));//钦赐xml文件地点55 56 return fb.getObject(); 57 } 58 59 } View Code

说明:

  • 类下面加多七个
    • @Configuration申明(该申明肖似于spring的配备文件卡塔 尔(阿拉伯语:قطر‎
    • @MapperScan注脚,内定扫描的mapper接口所在的包
  • 在那类中,注入了Environment实例,使用该实例能够去读取类路线下application.properties文件中的内容,读取文件内容的三种办法,见第二章
    第三个spring-boot程序
  • 在此类中,使用druid数据源定义了数量源Bean,spring-boot私下认可使用的是tomcat-jdbc数据源,那是springboot官方推荐的数据源(质量和并发性都很好卡塔尔
  • 听别人讲数据源生成SqlSessionFactory
    • 值得注意的是,数据源是必得内定的,不然springboot运维不了
    • typeAliasesPackage和mapperLocations不是必得的,若是整个项目不须要使用*Mapper.xml来写SQL的话(即只用注脚就能够消除卡塔尔,那么没有必要配
  • @Primary评释:钦定在同三个接口有八个落到实处类能够注入的时候,私下认可选项哪一个,并非让@Autowire评释报错(平时用来大多据源,多少个SqlSessionFactory的处境下卡塔 尔(阿拉伯语:قطر‎

如此那般今后,在品种中再利用springboot就和在ssm中(配置实现后卡塔 尔(英语:State of Qatar)使用同一了。

 

5、com.xxx.firstboot.mapper.UserMapper

金沙js娱乐场官方网站 10 1 package
com.xxx.firstboot.mapper; 2 3 import
org.apache.ibatis.annotations.Insert; 4 import
org.apache.ibatis.annotations.Param; 5 6 import
com.xxx.firstboot.domain.User; 7 8 public interface UserMapper { 9 10
@Insert(“INSERT INTO tb_user(username, password)
VALUES(#{username},#{password})”) 11 public int
insertUser(@Param(“username”) String username, @Param(“password”) String
password); 12 13 /** 14 * 插入顾客,并将主键设置到user中 15 *
注意:重临的是数据库影响条数,即1 16 */ 17 public int
insertUserWithBackId(User user); 18 } View Code

证实:该接口中有多少个方式,

  • 一个见怪不怪插入:直接用评释消除
  • 叁个安排重返主键:须求利用xml来消除

金沙js娱乐场官方网站 11 1 <?xml
version=”1.0″ encoding=”UTF-8″ ?> 2 <!DOCTYPE mapper PUBLIC
“-//mybatis.org//DTD Mapper 3.0//EN”
“; 3 4 <!–
钦点专业空间,要与接口名相似,源代码未有去看,揣度应该是由此”这里的namespace.上面方法的id”来定位方法的
–> 5 <mapper namespace=”com.xxx.firstboot.mapper.UserMapper”>
6 7 <!– 若无需活动回到主键,将useGeneratedKeys=”true”
keyProperty=”id”去掉就能够(当然如若无需活动回到主键,直接用注脚就可以)
–> 8 <insert id=”insertUserWithBackId” parameterType=”User”
useGeneratedKeys=”true” keyProperty=”id” > 9 <![CDATA[ 10 INSERT
INTO tb_user 11 ( 12 username, 13 password 14 ) 15 VALUES 16 ( 17
#{username, jdbcType=VARCHAR}, 18 #{password, jdbcType=VARCHAR} 19 )
20 ]]> 21 </insert> 22 23 </mapper> View Code

 

6、com.xxx.firstboot.dao.UserDao

金沙js娱乐场官方网站 12 1 package
com.xxx.firstboot.dao; 2 3 import
org.springframework.beans.factory.annotation.Autowired; 4 import
org.springframework.stereotype.Repository; 5 6 import
com.xxx.firstboot.domain.User; 7 import
com.xxx.firstboot.mapper.UserMapper; 8 9 @Repository 10 public class
UserDao { 11 12 @Autowired 13 private UserMapper userMapper; 14 15
public int insertUser(String username, String password){ 16 return
userMapper.insertUser(username, password); 17 } 18 19 public int
insertUserWithBackId(User user){ 20 return
userMapper.insertUserWithBackId(user); 21 } 22 23 } View Code

 

7、com.xxx.firstboot.service.UserService

金沙js娱乐场官方网站 13 1 package
com.xxx.firstboot.service; 2 3 import
org.springframework.beans.factory.annotation.Autowired; 4 import
org.springframework.stereotype.Service; 5 6 import
com.xxx.firstboot.dao.UserDao; 7 import com.xxx.firstboot.domain.User; 8
9 @Service 10 public class UserService { 11 12 @Autowired 13 private
UserDao userDao; 14 15 public boolean addUser(String username, String
password){ 16 return userDao.insertUser(username,
password)==1?true:false; 17 } 18 19 public User addUserWithBackId(String
username, String password){ 20 User user = new User(); 21
user.setUsername(username); 22 user.setPassword(password); 23
userDao.insertUserWithBackId(user);//该措施后,主键已经安装到user中了 24
return user; 25 } 26 27 } View
Code

 

8、com.xxx.firstboot.controller.UserController

金沙js娱乐场官方网站 14 1 package
com.xxx.firstboot.web; 2 3 import
org.springframework.beans.factory.annotation.Autowired; 4 import
org.springframework.web.bind.annotation.RequestMapping; 5 import
org.springframework.web.bind.annotation.RequestMethod; 6 import
org.springframework.web.bind.annotation.RequestParam; 7 import
org.springframework.web.bind.annotation.RestController; 8 9 import
com.xxx.firstboot.domain.User; 10 import
com.xxx.firstboot.service.UserService; 11 12 import
io.swagger.annotations.Api; 13 import
io.swagger.annotations.ApiImplicitParam; 14 import
io.swagger.annotations.ApiImplicitParams; 15 import
io.swagger.annotations.ApiOperation; 16 import
io.swagger.annotations.ApiResponse; 17 import
io.swagger.annotations.ApiResponses; 18 19 @RestController 20
@RequestMapping(“/user”) 21 @Api(“userController相关api”) 22 public
class UserController { 23 24 @Autowired 25 private UserServiceuser瑟维斯; 26 27 @ApiOperation(“增加顾客”) 28 @ApiImplicitParams({ 29
@ApiImplicitParam(paramType=”query”,name=”username”,dataType=”String”,required=true,value=”客商的全名”,defaultValue=”zhaojigang”),
30
@ApiImplicitParam(paramType=”query”,name=”password”,dataType=”String”,required=true,value=”顾客的密码”,defaultValue=”wangna”)
31 }) 32 @ApiResponses({ 33
@ApiResponse(code=400,message=”诉求参数没填好”), 34
@ApiResponse(code=404,message=”须求路线没有或页面跳转路线不对”) 35 }) 36
@RequestMapping(value=”/addUser”,method=RequestMethod.POST) 37 public
boolean addUser(@RequestParam(“username”) String username, 38
@RequestParam(“password”) String password) { 39 return
userService.addUser(username,password); 40 } 41 42
@ApiOperation(“加多客户且重临已经设置了主键的user实例”) 43
@ApiImplicitParams({ 44
@ApiImplicitParam(paramType=”query”,name=”username”,dataType=”String”,required=true,value=”客商的全名”,defaultValue=”zhaojigang”),
45
@ApiImplicitParam(paramType=”query”,name=”password”,dataType=”String”,required=true,value=”顾客的密码”,defaultValue=”wangna”)
46 }) 47 @ApiResponses({ 48
@ApiResponse(code=400,message=”央求参数没填好”), 49
@ApiResponse(code=404,message=”伏乞路线未有或页面跳转路线不对”) 50 }) 51
@RequestMapping(value=”/addUserWithBackId”,method=RequestMethod.POST) 52
public User addUserWithBackId(@RequestParam(“username”) String username,
53 @RequestParam(“password”) String password) { 54 return
userService.addUserWithBackId(username, password); 55 } 56 } View Code

 

测试:

跻身项目标pom.xml文件所在目录,实践”mvn
spring-boot:run”(那是最推荐的spring-boot的运作方式卡塔 尔(英语:State of Qatar),别的生机勃勃种在主类上右击–>”run
as”–>”java application”有的时候用

springboot + mybatis,springbootmybatis
springboot集成了springJDBC与JPA,可是还没集成mybatis,所以想要使用mybatis就要团结去集成。集成情势极其…

Swagger与SpringMVC项目整合

为了便利的关押项目中API接口,在英特网找了多数有关API接口管理的资料,认为近期最流行的实在Swagger了,功效强大,UI分界面美貌,何况帮忙在线测验等等,所以本身细心研讨了下Swagger的应用,上边就怎么样将Swagger与个体的SpringMVC项目开展整合做详细表明:

末段API管理界面: 
金沙js娱乐场官方网站 15

详细步骤:

1. 集成Swagger

1、在pom.xml中援引度swagger依赖包

Step1:项目中引进相关jar包:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <version.spring>3.2.9.RELEASE</version.spring>
        <version.jackson>2.4.4</version.jackson>
    </properties>

    <dependencies>
        ....
        <dependency>
            <groupId>com.mangofactory</groupId>
            <artifactId>swagger-springmvc</artifactId>
            <version>0.9.5</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${version.jackson}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${version.jackson}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${version.jackson}</version>
        </dependency>
    </dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

1.1 增加信赖

<!–swagger2 start–>

<dependency>

<groupId>io.springfox</groupId>

<artifactId>springfox-swagger2</artifactId>

<version>2.6.1</version>

</dependency>

<!–引入swagger-ui包–>

<dependency>

<groupId>io.springfox</groupId>

<artifactId>springfox-swagger-ui</artifactId>

<version>2.6.1</version>

</dependency>

 

<dependency>

Step2:增加自定义config文件

package com.spg.apidoc.common.configer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.models.dto.ApiInfo;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;

/**
 * 项目名称:apidoc
 *
 * @description:
 * @author Wind-spg
 * @create_time:2015年2月10日 上午10:27:51
 * @version V1.0.0
 *
 */
@Configuration
@EnableSwagger
// Loads the spring beans required by the framework
public class MySwaggerConfig
{

    private SpringSwaggerConfig springSwaggerConfig;

    /**
     * Required to autowire SpringSwaggerConfig
     */
    @Autowired
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
    {
        this.springSwaggerConfig = springSwaggerConfig;
    }

    /**
     * Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
     * framework - allowing for multiple swagger groups i.e. same code base
     * multiple swagger resource listings.
     */
    @Bean
    public SwaggerSpringMvcPlugin customImplementation()
    {
        return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns(
                ".*?");
    }

    private ApiInfo apiInfo()
    {
        ApiInfo apiInfo = new ApiInfo(
                "My Apps API Title", 
                "My Apps API Description",
                "My Apps API terms of service", 
                "My Apps API Contact Email", 
                "My Apps API Licence Type",
                "My Apps API License URL");
        return apiInfo;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

1.2 配置类

package com.inn.demo.config;

 

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

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 SwaggerConfiguration extends WebMvcConfigurerAdapter {

//生产关闭swagger

@Value(“${swagger.enable}”)

private boolean enableSwagger;

 

// /**

// * 访谈swagger ui
现身404时得以把注释去掉试试

// * 驱除能源系统财富目录与swagger
ui财富目录冲突难题

// *
那个地方要重复注入一下财富文件,不然不会注入财富的,也一贯不流入requestHandlerMappping,也就是xml配置的swagger财富配置

// * <mvc:resources
location=”classpath:/META-INF/resources/”
mapping=”swagger-ui.html”/>

// * <mvc:resources
location=”classpath:/META-INF/resources/webjars/”
mapping=”/webjars/**”/>

// * @param registry

// */

// @Override

// public void
addResourceHandlers(ResourceHandlerRegistry registry) {

//
registry.addResourceHandler(“/**”).addResourceLocations(“classpath:/static/”);

//
registry.addResourceHandler(“swagger-ui.html”)

//
.addResourceLocations(“classpath:/META-INF/resources/”);

// registry.addResourceHandler(“/webjars/**”)

//
.addResourceLocations(“classpath:/META-INF/resources/webjars/”);

// super.addResourceHandlers(registry);

// }

 

// /**

// * 协助分组 groupName

// */

// @Bean(value = “solrRestApi”)

// public Docket createSolrRestApi() {

// return new
Docket(DocumentationType.SWAGGER_2)

// .apiInfo(apiInfo()).groupName(“Solr
Demo模块”)

// .enable(enableSwagger)

// .select()

//
.apis(RequestHandlerSelectors.basePackage(“com.inn.demo.modules.solr.web”))

// .paths(PathSelectors.any())

// .build();

// }

 

@Bean(value = “userRestApi”)

public Docket createUserRestApi()
{

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

//.groupName(“客商管理”)

.enable(enableSwagger)

.globalOperationParameters(createCommonParams())//公共参数

.select()

.apis(RequestHandlerSelectors.basePackage(“com.inn.demo.modules.user.web”))

.paths(PathSelectors.any())

.build();

}

 

private ApiInfo apiInfo()
{

return new ApiInfoBuilder()

.title(“Demo APIs”)

.description(“应用实例”)

//.termsOfServiceUrl(“;)

//.contact(new Contact(“开发者1”, “”,
xxx@163.com“))

.version(“1.0”)

.build();

}

/**
 * 创建公共参数
 * @return
 */
private List<Parameter> createCommonParams() {
    //添加head参数start
    List<Parameter> pars = new ArrayList<Parameter>();

    ParameterBuilder tokenPar = new ParameterBuilder();
    tokenPar.name("x-access-token").description("令牌").modelRef(new ModelRef("string")).parameterType("header").required(false).build();

    pars.add(tokenPar.build());

    return pars;
    //添加head参数end
}

}

 

<groupId>io.springfox</groupId>

Step3:将此安顿到场到Spring容器中,如下:

<bean class="com.spg.apidoc.common.configer.MySwaggerConfig" />
  • 1

1.3 注明使用

职能范围

API

接收地方

对象属性

@ApiModelProperty

用在进出参数对象的字段上

合计集呈报

@Api

用于controller类上

说道描述

@ApiOperation

用在controller的不二法门上

Response集

@ApiResponses

用在controller的方法上

Response

@ApiResponse

用在 @ApiResponses里边

非对象参数集

@ApiImplicitParams

用在controller的主意上

非对象参数描述

@ApiImplicitParam

用在@ApiImplicitParams的艺术里边

呈报再次回到对象的含义

@ApiModel

用在回去对象类上

ApiImplicitParam的相关属性

属性

取值

作用

paramType

path

query

body

header

form

参数放在哪个地方:应当要有其一性情

header:header中提交:@RequestHeader获取

query :key=value提交:@RequestParam获取

path  :地址中付出:@PathVariable获取

body  :json流提交 :@RequestBody获取(限POST)

form  :表单提交:@RequestParam获取(限POST卡塔 尔(英语:State of Qatar)

dataType

Long

String

参数的数据类型 只作为标记认证,并从未实际验证

name

 

抽取参数名

value

 

收纳参数的意思描述

required

 

参数是还是不是必填

 

TRUE

必填

 

FALSE

非必填

defaultValue

 

默认值

ApiImplicitParam 与 ApiParam 的区别

ApiImplicitParam: 

  • 对Servlets恐怕非 JAX-KugaS的情形,只可以使用 ApiImplicitParam。
  • 在接收上,ApiImplicitParam比ApiParam具备越来越少的代码侵入性,只要写在点子上就足以了,但是急需提供具体的习性手艺相称swagger
    ui深入剖析使用。
  • ApiParam只必要少之甚少的性质,与swagger ui合作越来越好。

 

代码实例:

@RestController

@RequestMapping(value = “/user”)

@Api(value = “/user”, description = “人士基本消息 “)

public class UserController
{

 

static Map<String, User> users = Collections.synchronizedMap(new HashMap<String,
User>());

 

@ApiOperation(value = “获取客商列表”, notes = “”)

@RequestMapping(value = {“/list”}, 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 = “add”, method = RequestMethod.POST)

public String postUser(@RequestBody User user)
{

users.put(user.getId(),
user);

return “success”;

}

 

@ApiOperation(value = “获取客商详细音讯”, notes = “依据url的id来获得客户详细音信”)

@ApiParam(name = “id”, value = “用户ID”, required = true)

@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)

public User getUser(@PathVariable(value = “id”) String id)
{

return users.get(id);

}

 

@ApiOperation(value = “更新客商详细消息”, notes = “依照url的id来钦定更新指标,并基于传过来的user音讯来更新顾客详细音讯”)

@RequestMapping(value = “/update/{id}”, method =
RequestMethod.PUT)

public String putUser(@PathVariable @ApiParam(name = “id”, value = “用户ID”, required = true) String
id,

@RequestBody @ApiParam(name = “user”, value = “顾客详细实体user”, required = true) User user)
{

User u = users.get(id);

u.setName(user.getName());

u.setAge(user.getAge());

users.put(id, u);

return “success”;

}

 

@ApiOperation(value = “更新客户名称和年龄”, notes = “更新客商名称和岁数”)

@ApiImplicitParams({

@ApiImplicitParam(name = “id”, value = “用户ID”, required = true, dataType = “String”,paramType = “path”),

@ApiImplicitParam(name = “name”, value = “用户名”, required = true, dataType = “String”,paramType = “query”),

@ApiImplicitParam(name = “age”, value = “年龄”, required = true, dataType = “Integer”,paramType = “query”),

@ApiImplicitParam(name = “user”, value = “顾客音讯”, required = true, dataType = “User”,paramType = “body”),

@ApiImplicitParam(name = “headerName”, value = “Header信息”, required = true, dataType = “String”,paramType = “header”)

})

@RequestMapping(value = “/update/info/{id}”, method =
RequestMethod.POST)

public String
updateUserNameAndAge(@PathVariable(value = “id”) String
id,

@RequestParam(value = “name”) String
name,

@RequestParam(value = “age”) Integer
age,

@RequestHeader(value = “headerName”) String
headerName,

@RequestBody User user)
{

User u = users.get(id);

u.setName(name);

u.setAge(age);

users.put(id, u);

return “success”;

}

 

@ApiOperation(value = “删除客商”, notes = “依据url的id来内定删除对象”)

@ApiParam(name = “id”, value = “用户ID”, required = true)

@RequestMapping(value = “/delete/{id}”, method =
RequestMethod.DELETE)

public String deleteUser(@PathVariable String id)
{

users.remove(id);

return “success”;

}

 

@ApiOperation(value=”删除客商-传递数组”, notes=”删除对象,传递数组”)

@RequestMapping(value=”/users/deleteByIds”, method =
RequestMethod.DELETE)

public void deleteUsers(@ApiParam(“用户ID数组”) @RequestParam Integer[] ids)
{

for (int id:ids){

users.remove(id);

}

}

}

User实体类:

 

@JsonInclude(JsonInclude.Include.NON_NULL)

@JsonIgnoreProperties({“handler”, “hibernateLazyInitializer”})

@ApiModel(value = “User”)

public class User {

@ApiModelProperty(value = “ID”)

private String id;

 

@ApiModelProperty(value = “姓名”, required = true)

private String name;

 

@ApiModelProperty(value = “年龄”)

private Integer age;

 

public String getId()
{

return id;

}

 

public void setId(String id)
{

this.id = id;

}

 

public String getName()
{

return name;

}

 

public void setName(String name)
{

this.name = name;

}

 

public Integer getAge()
{

return age;

}

 

public void setAge(Integer age)
{

this.age = age;

}

}

 

<artifactId>springfox-swagger2</artifactId>

Step4:在代码中增多相关APIAnnotation,如下:

    @ResponseBody
    @RequestMapping(
            value = "addUser", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
    @ApiOperation(value = "添加用户", httpMethod = "POST", response = BaseResultVo.class, notes = "add user")
    public String addUser(@ApiParam(required = true, name = "postData", value = "用户信息json数据") @RequestParam(
            value = "postData") String postData, HttpServletRequest request)
    {
        LOGGER.debug(String.format("at function, %s", postData));
        if (null == postData || postData.isEmpty())
        {
            return super.buildFailedResultInfo(-1, "post data is empty!");
        }

        UserInfo user = JSON.parseObject(postData, UserInfo.class);
        int result = userService.addUser(user);
        return buildSuccessResultInfo(result);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

说明: 
当中@ApiOperation和@ApiParam为充裕的API相关注脚,个参数表达如下: 
@ApiOperation(value = “接口表明”, httpMethod = “接口需求格局”,
response = “接口再次回到参数类型”, notes =
“接口发表表明”;别的参数可参谋源码; 
@ApiParam(required = “是还是不是必须参数”, name = “参数名称”, value =
“参数具体描述”

1.4 访谈调整台

 

按以下步骤配置,项目运行后寻访:

<version>2.6.1</version>

Step5:添加Swagger UI配置

在GitHub上下载SwaggerUI项目,将dist下具有内容拷贝到本地品种webapp上边,结果目录如下图所示: 
金沙js娱乐场官方网站 16

1.5 可选配置

在application.properties中到场以下配置,用于安装测验要求的host,暗中认可在swagger
ui上做央浼测量试验时都是以/users/1为路线发送乞请。

若果急需纠正央求的根路线,就须求配备这些参数:

该Host也是swagger-ui发送测量试验央求的Host,
日常大家会将将接口文书档案铺排在测量检验服务器,那样就须求安装Host,

要不乞请都以由此localhost发送,必要不到测验服务器的接口。

springfox.documentation.swagger.v2.host
= yourapp.abc.com

布署获取api docs json数据的哀求路线 ,默以为/v2/api-docs:

springfox.documentation.swagger.v2.path = /api

 

</dependency>

Step6:修改index.html

将index.html中修改为{projectname}/api-docs

到此甘休,全数配置实现,运维你的种类,访问{projectName}/index.html就可以以看见到如下所示页面: 
金沙js娱乐场官方网站 15
金沙js娱乐场官方网站 18

类型最终demo可以预知个人GitHub 
 
参考: 
 

项目jar包下载:

 

 

       
当大家把我们的服务以REST的方式接口暴表露来,别的开采者要调用大家的接口首先要力所能致详细的问询我们的API,近年来差不离具有的开放平台都以把API以文书档案的款型放在网址上,比如:新浪、Tmall、Wechat等等。

在开拓者调用API在此之前对一些API表达的知道相比模糊,总想着能间接证实一下投机的通晓就好了,并非索要去档案的次序写测验代码来验证自身的主见。即API文档应有所直接施行力量。Swagger正是这般的叁个利器,Swagger
是一个正式和完好的框架,用于转移、描述、调用和可视化 RESTful 风格的 Web
服务。总体指标是使客商端和文件系统作为服务器以同后生可畏的进度来更新。文件的秘诀,参数和模型紧聚集成到劳动器端的代码,允许API来始终维持同步。Swagger
让计划处理和动用功用强盛的API从未如此归纳。

 

上面说一下什么样为依存项目拉长Swagger

第豆蔻梢头增加对Swagger的信任性

<dependency>
<groupId>com.mangofactory</groupId>
<artifactId>swagger-springmvc</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-core_2.10</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.0</version>
</dependency>

加入对Swagger的配置类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import com.wordnik.swagger.model.ApiInfo;

@Configuration
@EnableSwagger
public class MySwaggerConfig {
private SpringSwaggerConfig
springSwaggerConfig;

/**
* Required to autowire SpringSwaggerConfig
*/
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig
springSwaggerConfig) {
this.springSwaggerConfig =
springSwaggerConfig;
}

/**
* Every SwaggerSpringMvcPlugin bean is picked up by
the swagger-mvc framework – allowing for multiple
* swagger groups i.e. same code base multiple
swagger resource listings.
*/
@Bean
public SwaggerSpringMvcPlugin
customImplementation(){
SwaggerSpringMvcPlugin ssmp = new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.swaggerGroup(“api-docs”).build();
return ssmp;
}

private ApiInfo apiInfo() {
ApiInfo apiInfo
= new ApiInfo(
“tk API SPECIFICATION”,
“This is the tk api
specification,here you can dig into the details of api and do api
testing as well.”,
“”,
“”,
“”,
“”);
return
apiInfo;
}
}

在application.xml中增添陈设:

<mvc:annotation-driven/>
<bean id=”apiDoc” class=”com.tk.framework.rest.framework.swaggerconfig.MySwaggerConfig”/>
<!– Enable scanning of spring
@Configuration classes –>
<context:annotation-config/>
<!– Enable the default
documentation controller–>
<context:component-scan base-package=”com.mangofactory.swagger.controllers”/>

<!– Pick up the bundled spring
config–>
<context:component-scan base-package=”com.mangofactory.swagger.configuration”/>

紧接着,给开放API的Resource类加上API
Annotation,那样上一步配置的Scanner就可以看到扫描到该Resource开放的API了。 

@RestController
@RequestMapping(value = “/1/users”)
@Api(value = “User”, description = “User service api”, position = 1)
public class UserResourceV1 extends BaseResources
{
private static final Logger logger = LoggerFactory.getLogger(UserResourceV1.class);
@Autowired
private UserService userService;

@ResourceDescription(Resource=”user”, Operation=”getUser”)
@RequestMapping(value = “/{id}”, method = RequestMethod.GET)
@ApiOperation(httpMethod = “GET”, nickname=”getUser”, value = “get user by userId”)
public ResponseModel getUser(@ApiParam(value = “id for greeting”,
required = true)@PathVariable String id) throws RestException
{
UserModel u = null;
try
{
u =
userService.findById(id);
}
catch (Exception e)
{
logger.error(e.getMessage());
throw new RestException(e.getMessage());
}
ResponseModel r
= new ResponseModel();
r.setStatus(200);
r.setResult(u);
return r;
}

}

为Model增添Swagger的Annotation,那样Swagger
Scanner能够赢得越多关于Model对象的新闻。 :

@ApiModel(value=”User”)
@Entity
@Table(name = “user”)
public class UserModel {
/**
* id
*/
@ApiModelProperty(required = true)
private String id;
/**
* 姓名
*/
@ApiModelProperty(required = true)
private String name;
/**
* 年龄
*/
@ApiModelProperty(required = true,
allowableValues=”range[1,100]”)
private Integer age;
/**
* 性别
*/
@ApiModelProperty(required = true,
allowableValues = “F,M”)
private String sex;
@ApiModelProperty(required = true)
private String password;

……

在Swagger Annotation中:

 

    @API表示八个开放的API,能够经过description简要描述该API的功效。

   
在四个@API下,可有多个@ApiOperation,表示针对该API的CRUD操作。在ApiOperation
Annotation中得以由此value,notes描述该操作的效劳,response描述平时情状下该央浼的回来对象类型。

   
在叁个ApiOperation下,能够经过ApiResponses描述该API操作也许现身的至极景况。

    @ApiParam用于描述该API操作选拔的参数类型

 

接下去,大家把这一个音信和Swagger
UI集成,以极其美观,实用的方法把这个API音信突显出来。 

首先,从github(,
把该品种dist目录下的开始和结果拷贝到项目标webapp的目录下。 

金沙js娱乐场官方网站 19

 

 然后,改善index.jsp, 把Swagger UI对象中的U纳瓦拉L替换为本人的API路线:

window.swaggerUi
= new SwaggerUi({
url: “/api/api-docs”,
dom_id: “swagger-ui-container”,

运转项目,最终如下图所示:

 

金沙js娱乐场官方网站 20

 

 

金沙js娱乐场官方网站 21

 

金沙js娱乐场官方网站 22

 

 具备直接测量试验API的力量:

金沙js娱乐场官方网站 23

  

 

2. 改变静态API文书档案pdf

<dependency>

2.1 Maven 配置

======属性配置=======

<snippetsDirectory>${project.build.directory}/generated-snippets</snippetsDirectory>

<asciidoctor.input.directory>${project.basedir}/docs/asciidoc</asciidoctor.input.directory>

<generated.asciidoc.directory>${project.build.directory}/asciidoc</generated.asciidoc.directory>

<asciidoctor.html.output.directory>${project.build.directory}/asciidoc/html</asciidoctor.html.output.directory>

<asciidoctor.pdf.output.directory>${project.build.directory}/asciidoc/pdf</asciidoctor.pdf.output.directory>

 

=====信赖配置============

<!–离线文书档案–>

<dependency>

<groupId>org.springframework.restdocs</groupId>

<artifactId>spring-restdocs-mockmvc</artifactId>

<version>1.1.2.RELEASE</version>

<scope>test</scope>

</dependency>

<!–springfox-staticdocs 生成静态文书档案–>

<dependency>

<groupId>io.springfox</groupId>

<artifactId>springfox-staticdocs</artifactId>

<version>2.6.1</version>

</dependency>

<!–swagger2 end–>

 

============插件配置==========

<!–通过Asciidoctor使得asciidoc生成此外的文书档案格式,比如:PDF
或然HTML5–>

<plugin>

<groupId>org.asciidoctor</groupId>

<artifactId>asciidoctor-maven-plugin</artifactId>

<version>1.5.3</version>

<!–生成PDF–>

<dependencies>

<dependency>

<groupId>org.asciidoctor</groupId>

<artifactId>asciidoctorj-pdf</artifactId>

<version>1.5.0-alpha.14</version>

</dependency>

<!– Comment this section to use the default jruby
artifact provided by the plugin –>

<dependency>

<groupId>org.jruby</groupId>

<artifactId>jruby-complete</artifactId>

<version>1.7.21</version>

</dependency>

</dependencies>

 

<!–文书档案生成配置–>

<configuration>

<sourceDirectory>${asciidoctor.input.directory}</sourceDirectory>

<sourceDocumentName>index.adoc</sourceDocumentName>

<attributes>

<doctype>book</doctype>

<toc>left</toc>

<toclevels>3</toclevels>

<numbered></numbered>

<hardbreaks></hardbreaks>

<sectlinks></sectlinks>

<sectanchors></sectanchors>

<generated>${generated.asciidoc.directory}</generated>

</attributes>

</configuration>

<!–因为每趟试行只可以管理二个后端,所以对于各样想要的出口类型,都以独自分开施行–>

<executions>

<!–html5–>

<execution>

<id>output-html</id>

<phase>test</phase>

<goals>

<goal>process-asciidoc</goal>

</goals>

<configuration>

<backend>html5</backend>

<outputDirectory>${asciidoctor.html.output.directory}</outputDirectory>

</configuration>

</execution>

<!–pdf–>

<execution>

<id>output-pdf</id>

<phase>test</phase>

<goals>

<goal>process-asciidoc</goal>

</goals>

<configuration>

<backend>pdf</backend>

<outputDirectory>${asciidoctor.pdf.output.directory}</outputDirectory>

</configuration>

</execution>

</executions>

</plugin>

 

 

<groupId>io.springfox</groupId>

2.2 创建index.adoc文件

路径:项目名/docs/asciidoc/index.adoc

内容:

  1. include::{generated}/overview.adoc[]  
  2. include::{generated}/definitions.adoc[]  
  3. include::{generated}/paths.adoc[]  

 

<artifactId>springfox-swagger-ui</artifactId>

2.3 创制生成pdf、html的测量检验类

package com.inn.demo;

 

import io.github.robwin.markup.builder.MarkupLanguage;

import io.github.robwin.swagger2markup.GroupBy;

import io.github.robwin.swagger2markup.Swagger2MarkupConverter;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;

import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.http.MediaType;

import org.springframework.test.context.junit4.SpringRunner;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import org.springframework.web.context.WebApplicationContext;

import springfox.documentation.staticdocs.SwaggerResultHandler;

 

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

 

@AutoConfigureMockMvc

@AutoConfigureRestDocs(outputDir
= “target/generated-snippets”)

@RunWith(SpringRunner.class)

@SpringBootTest

public class Swagger2MarkupTest
{

private String snippetDir = “target/generated-snippets”;

private String outputDir = “target/asciidoc”;

 

@Autowired

private WebApplicationContext context;

 

private MockMvc mockMvc;

 

@Before

public void setUp() {

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).build();

}

 

/**

* 生成api html、pdf

* @throws Exception

*/

@Test

public void Test() throws Exception
{

// 得到swagger.json,写入outputDir目录中

mockMvc.perform(get(“/v2/api-docs”).accept(MediaType.APPLICATION_JSON))

.andDo(SwaggerResultHandler.outputDirectory(outputDir).build())

.andExpect(status().isOk())

.andReturn();

//
读取上一步生成的swagger.json转成asciiDoc,写入到outputDir

//
这几个outputDir必得和插件里面<generated></generated>标签配置大器晚成致

Swagger2MarkupConverter.from(outputDir + “/swagger.json”)

.withPathsGroupedBy(GroupBy.TAGS)//
按tag排序

.withMarkupLanguage(MarkupLanguage.ASCIIDOC)//
格式

.withExamples(snippetDir)

.build()

.intoFolder(outputDir);// 输出

}

}

 

运营测量试验类就可以生成pdf、html

  1. 生成的PDF和HTML文件:target/asciidoc/html and target/asciidoc/pdf
     

  2. Swagger-UI 汉化


<version>2.6.1</version>

3.1 增加自定义首页和译文

在resourece目录下开创\META-INF\resourece目录,然后创造四个名号为”swagger-ui.html”
的HTML文件

金沙js娱乐场官方网站 24

html内容:

<!DOCTYPE html>

<html>

<head>

<meta charset=”UTF-8″>

<title>Swagger UI</title>

<link rel=”icon” type=”image/png” href=”webjars/springfox-swagger-ui/images/favicon-32×32.png” sizes=”32×32″/>

<link rel=”icon” type=”image/png” href=”webjars/springfox-swagger-ui/images/favicon-16×16.png” sizes=”16×16″/>

<link href=’webjars/springfox-swagger-ui/css/typography.css’ media=’screen’ rel=’stylesheet’ type=’text/css’/>

<link href=’webjars/springfox-swagger-ui/css/reset.css’ media=’screen’ rel=’stylesheet’ type=’text/css’/>

<link href=’webjars/springfox-swagger-ui/css/screen.css’ media=’screen’ rel=’stylesheet’ type=’text/css’/>

<link href=’webjars/springfox-swagger-ui/css/reset.css’ media=’print’ rel=’stylesheet’ type=’text/css’/>

<link href=’webjars/springfox-swagger-ui/css/print.css’ media=’print’ rel=’stylesheet’ type=’text/css’/>

<script src=’webjars/springfox-swagger-ui/lib/object-assign-pollyfill.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/jquery-1.8.0.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/jquery.slideto.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/jquery.wiggle.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/jquery.ba-bbq.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/handlebars-4.0.5.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/lodash.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/backbone-min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/swagger-ui.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/highlight.9.1.0.pack.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/highlight.9.1.0.pack_extended.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/jsoneditor.min.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/marked.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lib/swagger-oauth.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/springfox.js’ type=’text/javascript’></script> <!–国际化操作:选取中文版
–>

<script src=’webjars/springfox-swagger-ui/lang/translator.js’ type=’text/javascript’></script>

<script src=’webjars/springfox-swagger-ui/lang/zh-cn.js’ type=’text/javascript’></script>

</head>

<body class=”swagger-section”>

<div id=’header’>

<div class=”swagger-ui-wrap”>

<a id=”logo” href=”javascript:void(0)”>

<img class=”logo__img” alt=”swagger” height=”30″ width=”30″ src=”webjars/springfox-swagger-ui/images/logo_small.png” />

<span class=”logo__title”>在线API</span>

</a>

<form id=’api_selector’>

<div class=’input’>

<select id=”select_baseUrl” name=”select_baseUrl”></select>

</div>

<div class=’input’>

<input placeholder=”; id=”input_baseUrl” name=”baseUrl” type=”text”/>

</div>

<div id=’auth_container’></div>

<div class=’input’><a id=”explore” class=”header__btn” href=”#” data-sw-translate>Explore</a></div>

</form>

</div>

</div>

<div id=”message-bar” class=”swagger-ui-wrap” data-sw-translate></div>

<div id=”swagger-ui-container” class=”swagger-ui-wrap”></div>

</body>

</html>

马到成功大家拜望 http://localhost:8080/swagger-ui.html 看看彰显效果:

金沙js娱乐场官方网站 25

</dependency>

3.2 更详细的汉化

只要想进一步调动译文,能够在META-INF\resources\webjars\springfox-swagger-ui\lang
目录下增加zh-cn.js文件.

金沙js娱乐场官方网站 26

 

然后在译文(zh-cn.js 卡塔 尔(英语:State of Qatar)内容,如下

‘use strict’;

 

/* jshint quotmark: double */

window.SwaggerTranslator.learn({

“Warning: Deprecated”:”警告:已过时”,

“Implementation Notes”:”完成备注”,

“Response Class”:”响应类”,

“Status”:”状态”,

“Parameters”:”参数”,

“Parameter”:”参数”,

“Value”:”值”,

“Description”:”描述”,

“Parameter Type”:”参数类型”,

“Data Type”:”数据类型”,

“Response Messages”:”响应音信”,

“HTTP Status Code”:”HTTP状态码”,

“Reason”:”原因”,

“Response Model”:”响应模型”,

“Request URL”:”请求URL”,

“Response Body”:”响应体”,

“Response Code”:”响应码”,

“Response Headers”:”响应头”,

“Hide Response”:”隐蔽响应”,

“Headers”:”头”,

“Try it out!”:”试一下!”,

“Show/Hide”:”显示/隐藏”,

“List Operations”:”展现操作”,

“Expand Operations”:”打开操作”,

“Raw”:”原始”,

“can’t parse JSON. Raw result”:”不大概拆解解析JSON. 原始结果”,

“Example Value”:”示例”,

“Click to set as parameter value”:”点击设置参数”,

“Model Schema”:”模型架构”,

“Model”:”模型”,

“apply”:”应用”,

“Username”:”用户名”,

“Password”:”密码”,

“Terms of service”:”服务条目款项”,

“Created by”:”创建者”,

“See more at”:”查看更多:”,

“Contact the developer”:”联系开采者”,

“api version”:”api版本”,

“Response Content Type”:”响应Content Type”,

“Parameter content type:”:”参数类型:”,

“fetching resource”:”正在拿到能源”,

“fetching resource list”:”正在收获能源列表”,

“Explore”:”浏览”,

“Show Swagger Petstore Example Apis”:”显示 Swagger Petstore 示例 Apis”,

“Can’t read from server. It may not have the
appropriate access-control-origin settings.”:”不恐怕从服务器读取。或然未有科学设置access-control-origin。”,

“Please specify the protocol for”:”请钦命左券:”,

“Can’t read swagger JSON from”:”不只怕读取swagger JSON于”,

“Finished Loading Resource Information. Rendering
Swagger UI”:”已加载能源音信。正在渲染Swagger UI”,

“Unable to read api”:”不只怕读取api”,

“from path”:”从路径”,

“server returned”:”服务器重返”

});

劳苦功高告成!

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-core</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.6.5</version>

</dependency>

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-annotations</artifactId>

<version>2.6.5</version>

</dependency>

2、创建swager配置类

package
com.vk.liyj.config;

import
io.swagger.annotations.ApiOperation;

import
org.springframework.context.annotation.Bean;

import
org.springframework.context.annotation.Configuration;

import
org.springframework.web.servlet.config.annotation.EnableWebMvc;

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;

/**

*
类描述:配置swagger2信息

*/

@Configuration //
让Spring来加载该类配置

//@EnableWebMvc //
启用Mvc,非springboot框架需求引进评释@EnableWebMvc

@EnableSwagger2 //
启用Swagger2

public class Swagger2Config
{

@Bean

public Docket
createRestApi() {

return new
Docket(DocumentationType.SWAGGER_2)