107 lines
5.1 KiB
Markdown
107 lines
5.1 KiB
Markdown
## MVC设置
|
||
* @Controller:修饰class,用来创建处理http请求的对象
|
||
* @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
|
||
* @RequestMapping:配置url映射
|
||
* value 请求路径 例如:@RequestMapping(value="/a/b"),则该方法对应的路径即为/a/b
|
||
* **在请求中可以以Ant通配符的方式配置路径**,例如:@RequestMapping(value="/*/b") 表示a/b、c/b等各个请求均可以访问到该方法,而@RequestMapping(value="/\*\*/b")则表示1/2/b,3/4/b都可以访问到该方法,单个\*号表示任意字符通配符,两个星号代表任意路径通配符
|
||
* @PathVariable("id") 配置rest请求中的可变路径参数
|
||
* @ModelAttribute 配置参数对象,前端可通过传递对象中的属性值来填充该对象
|
||
* @RequestParam 配置参数,对应名值对的形式
|
||
* @RequestBody 配置请求参数,该数据一个请求只有一个,且请求类型不能为get类型
|
||
|
||
## Swagger2配置
|
||
> 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
|
||
随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。
|
||
为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。
|
||
|
||
> 简单来说,swagger就是用来自动生成Spring MVC文档的工具,接口开发完毕后,无需手动再修改接口文档,直接让客户端/前端人员查看swagger生成的文档即可。
|
||
|
||
- 首先在pom.xml中导入swagger2的依赖
|
||
```
|
||
<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>
|
||
```
|
||
|
||
- 构建swagger的配置类
|
||
|
||
```
|
||
/**
|
||
* swagger的配置文件
|
||
* */
|
||
@Configuration
|
||
@EnableSwagger2
|
||
public class SwaggerConfig {
|
||
@Value("${baseUrl}")
|
||
private String baseUrl;
|
||
|
||
@Bean
|
||
public Docket createRestRequestApi(){
|
||
return new Docket(DocumentationType.SWAGGER_2)
|
||
// 配置ApiInfo,级当前应用的基本信息
|
||
.apiInfo(getAppInfo())
|
||
// 生成DocketBuilder
|
||
.select()
|
||
// 指定api类生成的包名,swagger会自动扫描指定包下的所有类,生成说明文档
|
||
.apis(RequestHandlerSelectors.basePackage("com.xiaoxiao.springboot2.controller"))
|
||
// 指定实现了RestController接口的类,生成说明文档
|
||
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
|
||
// 路径过滤规则,多数情况下不需要过滤
|
||
.paths(PathSelectors.any())
|
||
.build();
|
||
}
|
||
|
||
private ApiInfo getAppInfo(){
|
||
return new ApiInfoBuilder()
|
||
.title("api文档")
|
||
.description("小小的api文档说明")
|
||
.contact(new Contact("xiaoxiao", null, "xiaoyan159@163.com"))
|
||
.version("V0.1")
|
||
.termsOfServiceUrl(baseUrl)
|
||
.build();
|
||
}
|
||
}
|
||
```
|
||
> 注意:上面Docket的apis方法只有一个会生效,因此如果需要扫描不同包的controller的类及方法,可使用withClassAnnotation方式
|
||
|
||
此刻直接访问localhost:8080/swagger-ui.html,即可看到自动生成的说明文档,但是这些说明文档是自动生成的,可读性不高,可通过在controller上增加注解的方式提高文档可读性
|
||
```
|
||
@ApiImplicitParams(
|
||
@ApiImplicitParam(name = "user", dataType = "User", allowEmptyValue = false, required = true)
|
||
)
|
||
@ApiOperation(value = "打印snapSwitch配置信息", notes = "注意:")
|
||
```
|
||
|
||
* 访问静态资源(图片、音频等文件)
|
||
> springboot中访问静态资源,是按照如下顺序寻找的
|
||
> * classpath:/META-INF/resources/
|
||
> * classpath:/resources/
|
||
> * classpath:/static/
|
||
> * classpath:/public/
|
||
> * /
|
||
>
|
||
> 如果需要自定义静态资源位置,可以在application.properties中增加配置
|
||
> * spring.resources.static-locations=classpath:/
|
||
> * spring.mvc.static-path-pattern=/**
|
||
|
||
* 关于跨域
|
||
|
||
解决跨域问题,springboot中可以通过两种方式:
|
||
1. 在请求上添加注解@CrossOrigin(value ="http://localhost:8081")
|
||
2. 通过下面的代码
|
||
```java
|
||
@Configuration
|
||
public class WebMvcConfig implements WebMvcConfigurer{
|
||
@Override
|
||
public void addCorsMappings(CorsRegistry registry) {
|
||
registry.addMapping("/**").allowedOrigins("http://localhost:8081").allowedMethods("*").allowedHeaders("*");
|
||
}
|
||
}
|
||
``` |