add swagger to annotation

This commit is contained in:
LittleBoy 2021-04-07 10:53:11 +08:00
parent 81a3ca894f
commit d03f13a2bf
11 changed files with 155 additions and 5 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
target
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@ -7,6 +7,7 @@
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" /> <outputRelativeToContentRoot value="true" />
<module name="spring_annotation" /> <module name="spring_annotation" />
<module name="annotation" />
</profile> </profile>
</annotationProcessing> </annotationProcessing>
</component> </component>

6
annotation/.idea/vcs.xml generated Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

View File

@ -17,8 +17,8 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target> <maven.compiler.target>1.7</maven.compiler.target>
<swagger.version>3.0.0</swagger.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
@ -57,6 +57,16 @@
<artifactId>jackson-core</artifactId> <artifactId>jackson-core</artifactId>
<version>2.12.2</version> <version>2.12.2</version>
</dependency> </dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -0,0 +1,48 @@
package org.example.spring_annotation.config;
import org.apache.log4j.Logger;
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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@EnableWebMvc
@EnableSwagger2
@Configuration
public class SwaggerConfig {
private boolean enabled = true;
private Logger logger = Logger.getLogger(SwaggerConfig.class);
@Bean
public Docket createRestApi() {
logger.info("开始创建api 文档");
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("org.example.spring_annotation.controller")) // 注意修改此处的包名
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("接口列表 v1.1.0") // 任意请稍微规范点
.description("接口测试") // 任意请稍微规范点
// .termsOfServiceUrl("http://java.xiaoyan.me/demo/spring/swagger-ui.html") // url换成自己的ip:port
.contact(getContact()) // 无所谓这里是作者的信息
.version("1.1.0")
.build();
}
private Contact getContact() {
return new Contact("xiaoyan", "http://xiaoyan.me", "me@xiaoyan.me");
}
}

View File

@ -1,4 +1,4 @@
package org.example.spring_annotation; package org.example.spring_annotation.config;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;

View File

@ -1,4 +1,4 @@
package org.example.spring_annotation; package org.example.spring_annotation.config;
import org.apache.log4j.LogManager; import org.apache.log4j.LogManager;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -11,6 +11,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.ArrayList; import java.util.ArrayList;
@ -28,6 +29,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
logger.info("MVC配置启用静态资源解析-------->DefaultServletHandlerConfigurer"); logger.info("MVC配置启用静态资源解析-------->DefaultServletHandlerConfigurer");
configurer.enable(); configurer.enable();
//
} }
@Bean @Bean
@ -37,7 +39,18 @@ public class WebMvcConfig implements WebMvcConfigurer {
List<MediaType> mediaTypes = new ArrayList<MediaType>(); List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(new MediaType("utf-8")); mediaTypes.add(new MediaType("utf-8"));
converter.setSupportedMediaTypes(mediaTypes); converter.setSupportedMediaTypes(mediaTypes);
;
return converter; return converter;
} }
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
logger.info("静态资源映射");
//<mvc:resources mapping="/swagger/**" location="/WEB-INF/swagger/"/>
// registry.addResourceHandler("/swagger/**").addResourceLocations("/WEB-INF/swagger/");
// <mvc:resources mapping="/swagger-ui/**" location="classpath:/META-INF/resources/webjars/springfox-swagger-ui/"/>
// <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
registry.addResourceHandler("swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
} }

View File

@ -17,6 +17,6 @@ public class SC {
@RequestMapping("/sc-test-json") @RequestMapping("/sc-test-json")
@ResponseBody @ResponseBody
public User testUser() { public User testUser() {
return new User(1, "张三"); return new User(1, "张三",null,null);
} }
} }

View File

@ -0,0 +1,37 @@
package org.example.spring_annotation.controller.api;
import io.swagger.annotations.*;
import org.example.spring_annotation.dto.ApiResponseData;
import org.example.spring_annotation.po.User;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api
@RequestMapping("/user")
@RestController
public class UserController {
@PostMapping("/login")
@ApiOperation(
value = "登录", httpMethod = "POST", notes = "账号登录",
response = User.class
)
@ApiImplicitParams({
@ApiImplicitParam(required = true, name = "username", value = "账号", dataType = "String"),
@ApiImplicitParam(required = true, name = "password", value = "密码", dataType = "String")
})
public ApiResponseData<User> login(String username, String password) {
ApiResponseData<User> data = new ApiResponseData<>();
if (null == username || null == password) {
data.setCode(1);
data.setMessage("用户名和密码不能为空");
} else if ("admin".equals(username) && "admin".equals(password)) {
data.setData(new User(1, "张三", username, password));
} else {
data.setCode(2);
data.setMessage("账号或密码错误");
}
return data;
}
}

View File

@ -0,0 +1,16 @@
package org.example.spring_annotation.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class ApiResponseData<T> {
@ApiModelProperty(name = "响应码", required = true)
private Integer code = 0;
@ApiModelProperty(name = "消息")
private String message = "success";
@ApiModelProperty(name = "数据")
private T data;
}

View File

@ -1,5 +1,7 @@
package org.example.spring_annotation.po; package org.example.spring_annotation.po;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -7,7 +9,14 @@ import lombok.NoArgsConstructor;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ApiModel("用户实体")
public class User { public class User {
@ApiModelProperty(value = "ID")
private Integer id; private Integer id;
@ApiModelProperty(value = "姓名")
private String name; private String name;
@ApiModelProperty(value = "用户名")
private String username;
@ApiModelProperty(value = "密码")
private String password;
} }