±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËswaggerÅäÖÃÀàÀïÃæ,ÒªÅäÖÃ×Ô¼ºµÄcontroller°ü·¾¶ÒÔ¼°ÈçºÎʹÓÃswagger£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£ |
|
1£ºÈÏʶSwagger
Swagger ÊÇÒ»¸ö¹æ·¶ºÍÍêÕûµÄ¿ò¼Ü£¬ÓÃÓÚÉú³É¡¢ÃèÊö¡¢µ÷ÓúͿÉÊÓ»¯ RESTful ·ç¸ñµÄ Web
·þÎñ¡£×ÜÌåÄ¿±êÊÇʹ¿Í»§¶ËºÍÎļþϵͳ×÷Ϊ·þÎñÆ÷ÒÔͬÑùµÄËÙ¶ÈÀ´¸üС£ÎļþµÄ·½·¨£¬²ÎÊýºÍÄ£ÐͽôÃܼ¯³Éµ½·þÎñÆ÷¶ËµÄ´úÂ룬ÔÊÐíAPIÀ´Ê¼ÖÕ±£³Öͬ²½¡£
×÷Óãº
1. ½Ó¿ÚµÄÎĵµÔÚÏß×Ô¶¯Éú³É¡£
2. ¹¦ÄܲâÊÔ¡£
SwaggerÊÇÒ»×鿪ԴÏîÄ¿£¬ÆäÖÐÖ÷ÒªÒªÏîÄ¿ÈçÏ£º
1. Swagger-tools:Ìṩ¸÷ÖÖÓëSwagger½øÐм¯³ÉºÍ½»»¥µÄ¹¤¾ß¡£ÀýÈçģʽ¼ìÑé¡¢Swagger
1.2Îĵµ×ª»»³ÉSwagger 2.0ÎĵµµÈ¹¦ÄÜ¡£
2. Swagger-core: ÓÃÓÚJava/ScalaµÄµÄSwaggerʵÏÖ¡£ÓëJAX-RS(Jersey¡¢Resteasy¡¢CXF...)¡¢ServletsºÍPlay¿ò¼Ü½øÐм¯³É¡£
3. Swagger-js: ÓÃÓÚJavaScriptµÄSwaggerʵÏÖ¡£
4. Swagger-node-express: SwaggerÄ£¿é£¬ÓÃÓÚnode.jsµÄExpress
webÓ¦Óÿò¼Ü¡£
5. Swagger-ui£ºÒ»¸öÎÞÒÀÀµµÄHTML¡¢JSºÍCSS¼¯ºÏ£¬¿ÉÒÔΪSwagger¼æÈÝAPI¶¯Ì¬Éú³ÉÓÅÑÅÎĵµ¡£
6. Swagger-codegen£ºÒ»¸öÄ£°åÇý¶¯ÒýÇæ£¬Í¨¹ý·ÖÎöÓû§Swagger×ÊÔ´ÉùÃ÷ÒÔ¸÷ÖÖÓïÑÔÉú³É¿Í»§¶Ë´úÂë¡£
2£ºMaven
°æ±¾ºÅÇë¸ù¾Ýʵ¼ÊÇé¿ö×ÔÐиü¸Ä¡£
<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> |
3£º´´½¨Swagger2ÅäÖÃÀà
ÔÚApplication.javaͬ¼¶´´½¨Swagger2µÄÅäÖÃÀàSwagger2
package com.swaggerTest;
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;
/**
* Swagger2ÅäÖÃÀà
* ÔÚÓëspring boot¼¯³Éʱ£¬·ÅÔÚÓëApplication.javaͬ¼¶µÄĿ¼Ï¡£
* ͨ¹ý@Configuration×¢½â£¬ÈÃSpringÀ´¼ÓÔØ¸ÃÀàÅäÖá£
* ÔÙͨ¹ý@EnableSwagger2×¢½âÀ´ÆôÓÃSwagger2¡£
*/
@Configuration
@EnableSwagger2
public class Swagger2 {
/**
* ´´½¨APIÓ¦ÓÃ
* apiInfo() Ôö¼ÓAPIÏà¹ØÐÅÏ¢
* ͨ¹ýselect()º¯Êý·µ»ØÒ»¸öApiSelectorBuilderʵÀý,ÓÃÀ´¿ØÖÆÄÄЩ½Ó¿Ú±©Â¶¸øSwaggerÀ´Õ¹ÏÖ£¬
* ±¾Àý²ÉÓÃÖ¸¶¨É¨ÃèµÄ°ü·¾¶À´¶¨ÒåÖ¸¶¨Òª½¨Á¢APIµÄĿ¼¡£
*
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller"))
.paths(PathSelectors.any())
.build();
}
/**
* ´´½¨¸ÃAPIµÄ»ù±¾ÐÅÏ¢£¨ÕâЩ»ù±¾ÐÅÏ¢»áÕ¹ÏÖÔÚÎĵµÒ³ÃæÖУ©
* ·ÃÎʵØÖ·£ºhttp://ÏîĿʵ¼ÊµØÖ·/swagger-ui.html
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring BootÖÐʹÓÃSwagger2¹¹½¨RESTful APIs")
.description("¸ü¶àÇë¹Ø×¢http://www.baidu.com")
.termsOfServiceUrl("http://www.baidu.com")
.contact("sunf")
.version("1.0")
.build();
}
} |
ÈçÉÏ´úÂëËùʾ£¬Í¨¹ýcreateRestApiº¯Êý´´½¨DocketµÄBeanÖ®ºó£¬apiInfo()ÓÃÀ´´´½¨¸ÃApiµÄ»ù±¾ÐÅÏ¢£¨ÕâЩ»ù±¾ÐÅÏ¢»áÕ¹ÏÖÔÚÎĵµÒ³ÃæÖУ©¡£
4£ºÌí¼ÓÎĵµÄÚÈÝ
ÔÚÍê³ÉÁËÉÏÊöÅäÖÃºó£¬ÆäʵÒѾ¿ÉÒÔÉú²úÎĵµÄÚÈÝ£¬µ«ÊÇÕâÑùµÄÎĵµÖ÷ÒªÕë¶ÔÇëÇó±¾Éí£¬ÃèÊöµÄÖ÷ÒªÀ´Ô´ÊǺ¯ÊýµÄÃüÃû£¬¶ÔÓû§²¢²»ÓѺã¬ÎÒÃÇͨ³£ÐèÒª×Ô¼ºÔö¼ÓһЩ˵Ã÷À´·á¸»ÎĵµÄÚÈÝ¡£
SwaggerʹÓõÄ×¢½â¼°Æä˵Ã÷£º
@Api£ºÓÃÔÚÀàÉÏ£¬ËµÃ÷¸ÃÀàµÄ×÷Óá£
@ApiOperation£º×¢½âÀ´¸øAPIÔö¼Ó·½·¨ËµÃ÷¡£
@ApiImplicitParams : ÓÃÔÚ·½·¨Éϰüº¬Ò»×é²ÎÊý˵Ã÷¡£
@ApiImplicitParam£ºÓÃÀ´×¢½âÀ´¸ø·½·¨Èë²ÎÔö¼Ó˵Ã÷¡£
@ApiResponses£ºÓÃÓÚ±íʾһ×éÏìÓ¦
@ApiResponse£ºÓÃÔÚ@ApiResponsesÖУ¬Ò»°ãÓÃÓÚ±í´ïÒ»¸ö´íÎóµÄÏìÓ¦ÐÅÏ¢
l code£ºÊý×Ö£¬ÀýÈç400
l message£ºÐÅÏ¢£¬ÀýÈç"ÇëÇó²ÎÊýûÌîºÃ"
l response£ºÅ׳öÒì³£µÄÀà
@ApiModel£ºÃèÊöÒ»¸öModelµÄÐÅÏ¢£¨Ò»°ãÓÃÔÚÇëÇó²ÎÊýÎÞ·¨Ê¹ÓÃ@ApiImplicitParam×¢½â½øÐÐÃèÊöµÄʱºò£©
l @ApiModelProperty£ºÃèÊöÒ»¸ömodelµÄÊôÐÔ
×¢Ò⣺@ApiImplicitParamµÄ²ÎÊý˵Ã÷£º

Àý×Ó£º
package com.swaggerTest.controller;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
/**
* Ò»¸öÓÃÀ´²âÊÔswagger×¢½âµÄ¿ØÖÆÆ÷
* ×¢Òâ@ApiImplicitParamµÄʹÓûáÓ°Ïì³ÌÐòÔËÐУ¬Èç¹ûʹÓò»µ±¿ÉÄÜÔì³É¿ØÖÆÆ÷ÊÕ²»µ½ÏûÏ¢
*
* @author SUNF
*/
@Controller
@RequestMapping("/say")
@Api(value = "SayController|Ò»¸öÓÃÀ´²âÊÔswagger×¢½âµÄ¿ØÖÆÆ÷")
public class SayController {
@ResponseBody
@RequestMapping(value ="/getUserName",
method= RequestMethod.GET)
@ApiOperation(value="¸ù¾ÝÓû§±àºÅ»ñÈ¡Óû§ÐÕÃû",
notes="test: ½ö1ºÍ2ÓÐÕýÈ··µ»Ø")
@ApiImplicitParam(paramType="query",
name = "userNumber", value = "Óû§±àºÅ",
required = true, dataType = "Integer")
public String getUserName(@RequestParam Integer
userNumber){
if(userNumber == 1){
return "ÕÅÈý·á";
}
else if(userNumber == 2){
return "ĽÈݸ´";
}
else{
return "δ֪";
}
}
@ResponseBody
@RequestMapping("/updatePassword")
@ApiOperation(value="ÐÞ¸ÄÓû§ÃÜÂë", notes="¸ù¾ÝÓû§idÐÞ¸ÄÃÜÂë")
@ApiImplicitParams({
@ApiImplicitParam(paramType="query",
name = "userId", value = "Óû§ID",
required = true, dataType = "Integer"),
@ApiImplicitParam(paramType="query",
name = "password", value = "¾ÉÃÜÂë",
required = true, dataType = "String"),
@ApiImplicitParam(paramType="query",
name = "newPassword", value = "ÐÂÃÜÂë",
required = true, dataType = "String")
})
public String updatePassword(@RequestParam(value="userId")
Integer userId, @RequestParam(value="password")
String password,
@RequestParam(value="newPassword") String
newPassword){
if(userId <= 0 || userId > 2){
return "δ֪µÄÓû§";
}
if(StringUtils.isEmpty(password) || StringUtils.isEmpty(newPassword)){
return "ÃÜÂë²»ÄÜΪ¿Õ";
}
if(password.equals(newPassword)){
return "оÉÃÜÂë²»ÄÜÏàͬ";
}
return "ÃÜÂëÐ޸ijɹ¦!";
}
} |
Íê³ÉÉÏÊö´úÂëÌí¼ÓÉÏ£¬Æô¶¯Spring Boot³ÌÐò£¬·ÃÎÊ£ºhttp://localhost:8080/swagger-ui.html

ÈçÉÏͼ£¬¿ÉÒÔ¿´µ½±©Â©³öÀ´µÄ¿ØÖÆÆ÷ÐÅÏ¢£¬µã»÷½øÈë¿ÉÒÔ¿´µ½ÏêϸÐÅÏ¢¡£

Á½¸ö×¢Òâµã£º
1. paramType»áÖ±½ÓÓ°Ïì³ÌÐòµÄÔËÐÐÆÚ£¬Èç¹ûparamTypeÓë·½·¨²ÎÊý»ñȡʹÓõÄ×¢½â²»Ò»Ö£¬»áÖ±½ÓÓ°Ïìµ½²ÎÊýµÄ½ÓÊÕ¡£
ÀýÈ磺

ʹÓÃSawgger UI½øÐвâÊÔ£¬½ÓÊÕ²»µ½£¡

2. »¹ÓÐÒ»¸öÐèҪעÒâµÄµØ·½£º
ConntrollerÖж¨ÒåµÄ·½·¨±ØÐëÔÚ@RequestMapperÖÐÏÔʾµÄÖ¸¶¨RequestMethodÀàÐÍ£¬·ñÔòSawggerUi»áĬÈÏΪȫÀàÐͽԿɷÃÎÊ£¬
APIÁбíÖлáÉú³É¶àÌõÏîÄ¿¡£

ÈçÉÏͼ£ºupdatePassword()δָ¶¨requestMethod£¬½á¹ûÉú³ÉÁË7ÌõAPIÐÅÏ¢¡£ËùÒÔÈç¹ûûÓÐÌØÊâÐèÇ󣬽¨Òé¸ù¾Ýʵ¼ÊÇé¿ö¼ÓÉÏrequestMethod¡£

5£ºSwagger UIÃæ°å˵Ã÷

|