Swagger2在SpringBoot环境下的使用,SpringBoot学习笔记之集成swagger

Swagger2在SpringBoot环境下的选择

集成步骤

第四章 springboot + swagger,springbootswagger

注:本文参考自

 

swagger用于定义API文书档案。

好处:

  • 上下端分离开发
  • API文书档案格外肯定
  • 测试的时候不须要再选拔U君越L输入浏览器的点子来访问Controller
  • 价值观的输入U奔驰M级L的测试方法对于post请求的传参相比较麻烦(当然,能够选拔postman那样的浏览器插件)
  • spring-boot与swagger的三合一简单的一逼

一 、项目结构

和上一节一样,没有改动。

2、pom.xml

引入了多个jar。

www.5929.com 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

www.5929.com 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

www.5929.com 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表明中,钦定1个呼吁参数的各样方面
    • paramType:参数放在哪个地点
      • header–>请求参数的获取:@RequestHeader
      • query–>请求参数的拿走:@RequestParam
      • path(用于restful接口)–>请求参数的获得:@帕特hVariable
      • body(不常用)
      • form(不常用)
    • name:参数名
    • dataType:参数类型
    • required:参数是还是不是必须传
    • value:参数的情趣
    • defaultValue:参数的暗许值
  • @ApiResponses:用于表示一组响应
  • @ApiResponse:用在@ApiResponses中,一般用来表达2个荒唐的响应消息
    • code:数字,例如400
    • message:消息,例如”请求参数没填好”
    • response:抛出特别的类

上述这一个就是最常用的多少个注明了。

实际别的的笺注,查看:

 

测试:

起初服务,浏览器输入””

www.5929.com 4

最上方二个红框:@Api

GET红框:method=RequestMethod.GET

右侧红框:@ApiOperation

parameter红框:@ApiImplicitParams体系表明

response messages红框:@ApiResponses种类申明

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

www.5929.com 5

 

springboot + swagger,springbootswagger
注:本文参考自
swagger用于定义API文书档案。 好处: 前后端分离开发 API文书档案…

第五章 springboot + mybatis,springbootmybatis

springboot集成了springJDBC与JPA,不过从未集成mybatis,所以想要使用mybatis就要团结去集成。集成格局优良简单。

① 、项目组织

www.5929.com 6

 

2、pom.xml

www.5929.com 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
<Swagger2在SpringBoot环境下的使用,SpringBoot学习笔记之集成swagger。!– 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:Alibaba的数据源

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

 

3、application.properties

www.5929.com 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集成的入口

www.5929.com 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)成立数量源 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文件的话(只用申明就足以消除),则不加
53
fb.setTypeAliasesPackage(env.getProperty(“mybatis.typeAliasesPackage”));//钦点基包
54 fb.setMapperLocations(new
帕特hMatchingResourcePatternResolver().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注明:内定在同三个接口有多少个落到实处类可以注入的时候,默许选项哪2个,而不是让@Autowire申明报错(一般用来多数据源,四个SqlSessionFactory的情况下)

如此这般之后,在档次中再利用springboot就和在ssm中(配置完结后)使用同一了。

 

5、com.xxx.firstboot.mapper.UserMapper

www.5929.com 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

表明:该接口中有七个主意,

  • 2个平日插入:直接用注脚化解
  • 1个安顿重临主键:需求采纳xml来解决

www.5929.com 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

www.5929.com 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

www.5929.com 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

www.5929.com 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 UserServiceuserService; 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的运营格局),此外一种在主类上右击–>”run
as”–>”java application”不常用

springboot + mybatis,springbootmybatis
springboot集成了springJDBC与JPA,可是并未集成mybatis,所以想要使用mybatis就要本身去集成。集成格局拾叁分…

1. 集成Swagger

壹 、在pom.xml中引成本swagger注重包

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>

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>

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)

dataType

Long

String

参数的数据类型 只作为标志申明,并从未实际验证

name

 

收纳参数名

value

 

接纳参数的含义描述

required

 

参数是不是必填

 

TRUE

必填

 

FALSE

非必填

Swagger2在SpringBoot环境下的使用,SpringBoot学习笔记之集成swagger。defaultValue

 

默认值

ApiImplicitParam 与 ApiParam 的区别

ApiImplicitParam: 

  • 对Servlets大概非 JAX-LX570S的环境,只可以利用 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>

1.4 访问控制台

 

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

<version>2.6.1</version>

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>

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;

www.5929.com, 

@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文件

www.5929.com 15

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 看看展现效果:

www.5929.com 16

</dependency>

3.2 更详细的汉化

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

www.5929.com 17

 

下一场在译文(zh-cn.js )内容,如下

‘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)

.apiInfo(apiInfo())

.select()

//
扫描钦点包中的swagger申明

//
.apis(RequestHandlerSelectors.basePackage(“com.vk.liyj”))

//
扫描全体有表明的api,用那种艺术更灵活

.apis(RequestHandlerSelectors

.withMethodAnnotation(ApiOperation.class))

.paths(PathSelectors.any()).build();

}

private ApiInfo apiInfo()
{

return new
ApiInfoBuilder()

.title(“基础平台 RESTful
APIs”)

.description(

“基础平台 RESTful
风格的接口文书档案,内容详细,相当的大的缩减了上下端的调换花费,同时确认保障代码与文书档案保持高度一致,一点都不小的压缩维护文书档案的时日。”)

.termsOfServiceUrl(“”)

.contact(“Xia”).version(“1.0.0”).build();

}

}

透过@Configuration注解,申明它是2个布局类,@EnableSwagger2开启swagger2。apiINfo()配置部分为主的音讯。apis()内定扫描的包会生成文书档案。

3、编写swagger注解

package com.vk.liyj.model;

import
io.swagger.annotations.ApiModel;

import
io.swagger.annotations.ApiModelProperty;

import java.util.Date;

import
org.springframework.format.annotation.DateTimeFormat;

import
com.fasterxml.jackson.annotation.JsonFormat;

import
com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import
com.fasterxml.jackson.annotation.JsonInclude;

/**

* 职员消息表 注脚:@ApiModel 和
@ApiModelProperty
用于在经过对象吸收参数时在API文书档案中显得字段的求证

* 表明:@DateTimeFormat 和 @JsonFormat
用于在收取和重返日期格式时将其格式化 实体类对应的数据表为:
user_info

*

*

*/

@JsonInclude(JsonInclude.Include.NON_NULL)

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

@ApiModel(value = “UserInfo”)

public class UserInfo {

@ApiModelProperty(value = “ID”)

private Integer id;

@ApiModelProperty(value = “用户登录账号”,
required = true)

private String userNo;

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

private String userName;

@ApiModelProperty(value =
“姓名拼音”)

private String spellName;

@ApiModelProperty(value = “密码”, required
= true)

private String password;

@ApiModelProperty(value = “手机号”,
required = true)

private String userPhone;

@ApiModelProperty(value = “性别”)

private Integer userGender;

@ApiModelProperty(value =
“记录创设时间”)

@DateTimeFormat(pattern = “yyyy-MM-dd
HH:mm:ss”)

private Date createTime;

@ApiModelProperty(value =
“记录修改时间”)

@DateTimeFormat(pattern = “yyyy-MM-dd
HH:mm:ss”)

private Date updateTime;

@JsonFormat(locale = “zh”, timezone =
“GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)

public Date getCreateTime() {

return createTime;

}

@JsonFormat(locale = “zh”, timezone =
“GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)

public Date getUpdateTime() {

return updateTime;

}

}

肆 、控制器类

package
com.vk.liyj.controller;

import
io.swagger.annotations.Api;

import
io.swagger.annotations.ApiImplicitParam;

import
io.swagger.annotations.ApiImplicitParams;

import
io.swagger.annotations.ApiOperation;

import
java.util.List;

import
javax.servlet.http.HttpServletRequest;

import
javax.servlet.http.HttpServletResponse;

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

import
org.springframework.stereotype.Controller;

import
org.springframework.web.bind.annotation.RequestMapping;

import
org.springframework.web.bind.annotation.RequestMethod;

import
org.springframework.web.bind.annotation.RequestParam;

import
com.vk.liyj.model.UserInfo;

import
com.vk.liyj.service.UserInfoService;

/**

* 类描述:职员为主消息

*/

@Controller

@RequestMapping(value =
“/userInfo”)

@Api(value = “UserInfo”,
description = “职员为主音信 “)

public class
UserInfoController {

@Autowired

UserInfoService
service;

@RequestMapping(value =
“/selectAllUsers”, method = RequestMethod.GET)

@ApiOperation(value =
“查询所有的人口音信”, notes = “查询全部的人手音信”)

public String
selectAllUsers(HttpServletRequest request, HttpServletResponse response)
{

List<UserInfo>
userList = service.selectAllUsers();

request.setAttribute(“userList”,
userList);

return
“userList.jsp”;

}

@RequestMapping(value =
“selectById”, method = RequestMethod.GET)

@ApiOperation(value =
“依照用户id查询用户详细音讯”, notes =
“根据用户id查询用户详细音讯”)

@ApiImplicitParams({

@ApiImplicitParam(name =
“type”, value = “类型(修改:update;暗许为查看)”, required = false,
paramType = “query”),

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

})

public String
selectById(HttpServletRequest request, HttpServletResponse
response,

@RequestParam(value = “id”)
Integer id, @RequestParam(value = “type”) String type) {

UserInfo user =
service.selectByPrimaryKey(id);

request.setAttribute(“user”,
user);

if(“update”.equals(type))
{

return
“userUpdate.jsp”;

} else {

return
“userView.jsp”;

}

}

@RequestMapping(value =
“deleteById”, method = RequestMethod.GET)

@ApiOperation(value =
“依照用户id删除用户信息”, notes = “依据用户id删除用户消息”)

@ApiImplicitParams({

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

})

public String
deleteById(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = “id”) Integer id) {

int count = 0;

try {

count =
service.deleteByPrimaryKey(id);

if(count <=0 ) {

return “error.jsp”;

} else {

request.getRequestDispatcher(“selectAllUsers”).forward(request,
response);

return
“userList.jsp”;

}

} catch (Exception e)
{

e.getMessage();

e.printStackTrace();

return “error.jsp”;

}

}

@RequestMapping(value =
“add”, method = RequestMethod.POST)

@ApiOperation(value =
“添加用户音讯”, notes = “添加用户音讯”)

public String
add(HttpServletRequest request, HttpServletResponse response, UserInfo
user) {

int count = 0;

try {

count =
service.insertSelective(user);

if(count <=0 ) {

return “error.jsp”;

} else {

//POST请求的方法无法一直转账到GET请求的法子,供给重定向

response.sendRedirect(“selectAllUsers”);

return
“userList.jsp”;

}

} catch (Exception e)
{

e.getMessage();

e.printStackTrace();

return “error.jsp”;

}

}

@RequestMapping(value =
“update”, method = RequestMethod.POST)

@ApiOperation(value =
“依据用户id修改用户音讯”, notes = “根据用户id修改用户音信”)

public String
update(HttpServletRequest request, HttpServletResponse response,
UserInfo user) {

int count = 0;

try {

count =
service.updateByPrimaryKeySelective(user);

if(count <=0 ) {

return “error.jsp”;

} else {

//POST请求的方式无法平昔转化到GET请求的方法,要求重定向

response.sendRedirect(“selectAllUsers”);

return
“userList.jsp”;

}

} catch (Exception e)
{

e.getMessage();

e.printStackTrace();

return “error.jsp”;

}

}

}

swagger通过注明声明该接口会扭转文书档案,包罗接口名、请求方法、参数、再次来到音信的等等。

  • @Api:修饰整个类,描述Controller的法力
  • @ApiOperation:描述一个类的三个格局,可能说2个接口
  • @ApiParam:单个参数描述
  • @ApiModel:用对象来接过参数
  • @ApiProperty:用对象吸收参数时,描述对象的3个字段
  • @ApiResponse:HTTP响应在那之中三个描述
  • @ApiResponses:HTTP响应全体描述
  • @ApiIgnore:使用该申明忽略那一个API
  • @ApiError :发生错误再次来到的音信
  • @ApiParamImplicitL:贰个请求参数
  • @ApiParamsImplicit 三个请求参数

伍 、运行程序访问
http://localhost:8080/spring-mvc/swagger-ui.html

⑥ 、替换默许的UI

<dependency>

<groupId>com.github.xiaoymin</groupId>

<artifactId>swagger-bootstrap-ui</artifactId>

<version>1.6</version>

</dependency>

<!–
使用swagger-bootstrap-ui替换私下认可的UI

<dependency>

<groupId>io.springfox</groupId>

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

<version>2.6.1</version>

</dependency>

–>

轮换后走访路径:http://localhost:8080/web/doc.html

参考资料

http://blog.csdn.net/songanling/article/details/71079304

https://gitee.com/xiaoym/swagger-bootstrap-ui

源码下载地址:

Leave a Comment.