3.3 OpenFeign实现文件上传
1.编写配置类(文件上传或者传递消息头)
主要实现文件上传
@Configuration
public class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder(){
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
2.编写服务接口
@FeignClient(value = "LxVoteServer",configuration = MultipartSupportConfig.class)
public interface VoteService {
//查询全部
@GetMapping("/server/oss/all.do")
R all();
//文件上传
@PostMapping(value = "/server/oss/uploadimg.do",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
R upload(@RequestPart MultipartFile file);
//修改访问地址/
@PostMapping("/server/oss/changeurl.do")
R change(@RequestParam int id);
@PostMapping("/server/activity/save.do")
R save(@RequestBody ActivityDto dto);
}
3.编写代码
@RestController
@RequestMapping("/api/vote/")
public class VoteController {
@Autowired
private VoteService service;
//新增
@PostMapping("saveactivity.do")
public R save(@RequestBody ActivityDto dto){
return service.save(dto);
}
//查询全部
@GetMapping("allosslog.do")
public R all(){
return service.all();
}
//文件上传
@PostMapping("uploadimg.do")
public R upload(@RequestParam MultipartFile file){
return service.upload(file);
}
//修改访问地址
@PostMapping("changeurl.do")
public R change(@RequestParam int id){
return service.change(id);
}
}
4.项目的配置
server:
port: 9090
spring:
application:
name: LxHelloConsumer #项目名,服务名
cloud:
nacos:
discovery: #注册中心
server-addr: 127.0.0.1:8848
servlet:
multipart:
enabled: true
max-file-size: 10MB
max-request-size: 100MB
3.3 OpenFeign使用总结
调用远程服务的参数传递:
1.键值对传输 必须使用:@RequestParam注解进行修饰 不可省略(包括服务提供者)
2.对象传输 必须使用:@RequestBody
3.传输文件MultipartFile,必须使用:@RequestPart
eg:
@Configuration
public class MultipartSupportConfig {
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
@Bean
public Encoder feignFormEncoder(){
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
@FeignClient(value = "LxVoteServer",configuration = MultipartSupportConfig.class)
public interface VoteService {
//文件上传
@PostMapping(value = "/server/oss/uploadimg.do",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
R upload(@RequestPart MultipartFile file);
}
四、SpringCloud初体验
4.1 环境准备
a.nacos
拥有1台Nacos服务器
b.maven
3.Maven
采用Maven的聚合实现多项目管理
1.根项目
统一约束管理
2.子项目-提供者
实现服务注册
3.子项目-消费者
实现服务的远程调用,消费服务
4.2 创建根项目
根项目:
1.创建SpringBoot项目,选择对应的依赖
<!-- 1.SpringBoot项目标志,继承父级项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring-cloud.version>2020.0.4</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
4.3 创建服务提供者
CloudStudy_Provider
1.依赖的jar
<!-- 1.Nacos注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.1</version>
</dependency>
<!-- web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 2.负载均衡-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 3.服务调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.编写代码
实现服务的远程方法调用
@FeignClient(value = "LxHelloProvider")//标记这是远程服务,需要指定服务名称
public interface HelloService {
@GetMapping("/api/hello/hi") //必须和服务提供者的一样
String hi();
}
@RestController
public class HiController {
@Autowired
private HelloService service;
@GetMapping("/api/hi/first")
public String first(){
return service.hi();
}
}
3.开关类使用注解
1.注册与发现服务 2.扫描@FeignClient
@SpringBootApplication
@EnableDiscoveryClient //注册与发现服务
@EnableFeignClients //启用OpenFeign
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
4.配置application.yml
server:
port: 9090
spring:
application:
name: LxHelloConsumer #项目名,服务名
cloud:
nacos:
discovery: #注册中心
server-addr: 127.0.0.1:8848
5.运行测试