一、文件上传
//文件上传控制器
@RestController
public class FileUploadController {
@PostMapping("/upload")
// @RequestMapping(value = "/upload",method = RequestMethod.POST)
public String up(String name, MultipartFile photo, HttpServletRequest request) throws IOException {
System.out.println(name);
System.out.println(photo.getOriginalFilename());
System.out.println(photo.getContentType());
// System.out.println(System.getProperty("user.dir"));
//前面路径动态获取,后面upload不存在要自己获取
String path= request.getServletContext().getRealPath("/xiaxiede/");
System.out.println(path);
saveFile(photo,path);
return "上传成功";
}
public void saveFile(MultipartFile photo,String path) throws IOException {
File dir = new File(path);
if(!dir.exists()){
dir.mkdir();
}
File file = new File(path+photo.getOriginalFilename());
photo.transferTo(file);
}
}
如果出现报错,可能是文件过大,只需要在application.properties里面添加spring.servlet.multipart.max-file-size=XXMB
(XX:任意数字)
二、拦截器
1、简要
SpringBoot定义了HandlerInterceptor接口来实现自定义拦截器的功能
这个接口定义了preHandle、postHandle、afterCompletion三种方法,实现接口时,记得重写父类方法
2、LoginInterceptor
新建一个拦截器包,试验在访问控制器之前会执行一遍拦截器
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("LoginInterceptor");
return true;
}
}
新建一个config包,以下是WebConfig代码,将addPathPatterns去掉就是全部拦截,无论访问啥都会执行一遍拦截器的东西
@Configuration
//加configuration 项目会自动运行这部分
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor( new LoginInterceptor()); 全部拦截
//可以添加路径设置拦截路径 再去访问别的,发现控制台没有loginInterceptor了
registry.addInterceptor( new LoginInterceptor()).addPathPatterns("/user/**");
}
}
随便访问一个控制器,例如hello,注意看控制台
三、RestFul风格接口
只是一种软件架构风格
1、特点
①一个URL代表一种资源
②GET获取资源、POST新建资源、PUT更新资源、DELETE删除资源
③通过操作资源的形式实现服务器请求操作
④资源形式是JSON或HTML
⑤从客户端到服务端每个请求要包含必要的信息
2、UserController
新建控制器
@RestController
public class UserController {
@ApiOperation("获取用户id")//配合swagger进入swagger-ui.html查看注释
@GetMapping("/user/{id}")
public String getUserById(@PathVariable int id){
System.out.println(id);
return "根据id获取用户信息";
}
@PostMapping("/user")
public String save(User user){return "添加用户";}
@PutMapping("/user")
public String update(User user){return "更新用户";}
@DeleteMapping("/user/{id}")
public String deleteById(@PathVariable int id){
System.out.println(id);
return "根据id删除用户";
}
}
四、Swagger
方便前后端交互
pom.xml中添加依赖:
<!-- 添加swagger2相关功能-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- 添加swagger-ui相关功能-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
在config包下新建SwaggerConfig类:
@Configuration //告诉spring容器 这是一个配置类
@EnableSwagger2 //启用swagger2功能
public class SwaggerConfig {
// 配置swagger2相关的bean
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com"))//com包下所有API都交给swagger2管理
.paths(PathSelectors.any()).build();
}
// 主要是API文档页面显示信息
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("演示项目API")
.description("演示项目")
.version("1.0")
.build();
}
//实际开发这个只用配置一次
}
浏览器输入
localhost/swagger-ui.html
可以看到项目中的控制器:
由于我们在UserController下的getUserById方法前添加了 @ApiOperation("获取用户id")
注释,因此页面如下: