问题记录_SpringCloud:Feign获取文件流

问题描述

  • A服务(服务提供者)提供文件下载接口
  • B服务(服务消费者)通过Feign请求拿到文件

服务提供者A

@GetMapping(value = "/file/{fileName}")
public void downFile(@PathVariable("fileName") String fileName, HttpServletResponse response) {
  // 返回一个文件流
}

服务消费者B

  • Feign客户端
@FeignClient("consume-file")
public interface FileFeignClient {
 
    @GetMapping(value = "/file/{fileName}")
    Response downFile(@PathVariable("fileName") String fileName);
}
  • 响应给前端
private final FileFeignClient fileFeignClient;

@GetMapping(value = "down/{fileName}")
public void down(@PathVariable("fileName") String fileName, HttpServletResponse response){
    Response responseFile =  fileFeignClient.downFile(fileName);
    InputStream inputStream = responseFile.body().asInputStream();
    // TODO设置响应头及响应文件名称

    IOUtils.copy(inputStream,response.getOutputStream());
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Spring Cloud Feign中配置FastJson序列化,您需要完成以下步骤: 1. 添加FastJson依赖 在项目的pom.xml文件中,添加FastJson依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> ``` 2. 创建FastJson转换器 创建一个FastJson转换器类,继承自Spring的HttpMessageConverter接口,并实现其方法。代码如下: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Type; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class FastJsonHttpMessageConverter implements HttpMessageConverter<Object> { public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private SerializerFeature[] serializerFeatures = new SerializerFeature[0]; private Feature[] parserFeatures = new Feature[0]; @Override public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) { return true; } @Override public boolean canWrite(Type type, Class<?> aClass, MediaType mediaType) { return true; } @Override public List<MediaType> getSupportedMediaTypes() { List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.APPLICATION_JSON_UTF8); mediaTypes.add(MediaType.APPLICATION_JSON); mediaTypes.add(MediaType.TEXT_PLAIN); return mediaTypes; } @Override public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws IOException { InputStream inputStream = inputMessage.getBody(); return JSON.parseObject(inputStream, DEFAULT_CHARSET, type, parserFeatures); } @Override public void write(Object o, Type type, MediaType mediaType, HttpOutputMessage outputMessage) throws IOException { HttpHeaders headers = outputMessage.getHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); String jsonString = JSON.toJSONString(o, serializerFeatures); OutputStream outputStream = outputMessage.getBody(); outputStream.write(jsonString.getBytes(DEFAULT_CHARSET)); outputStream.flush(); } public SerializerFeature[] getSerializerFeatures() { return serializerFeatures; } public void setSerializerFeatures(SerializerFeature[] serializerFeatures) { this.serializerFeatures = serializerFeatures; } public Feature[] getParserFeatures() { return parserFeatures; } public void setParserFeatures(Feature[] parserFeatures) { this.parserFeatures = parserFeatures; } } ``` 3. 配置FastJson转换器 在Spring的配置类中,创建一个FastJson转换器的bean,并将其注册到Spring的HttpMessageConverters中。代码如下: ```java import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; @Configuration public class FeignConfiguration { @Bean public HttpMessageConverter fastJsonHttpMessageConverter() { return new FastJsonHttpMessageConverter(); } @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(new ObjectMapper()); messageConverters.add(converter); messageConverters.add(fastJsonHttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); return restTemplate; } } ``` 4. 配置Feign ClientFeign Client的配置类中,使用@FeignClient注解的configuration属性,将FastJson转换器的bean引入到Feign Client中。代码如下: ```java import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableFeignClients(defaultConfiguration = {FeignConfiguration.class}) public class FeignClientConfiguration { } ``` 完成以上步骤之后,您就可以在Spring Cloud Feign中使用FastJson作为序列化工具了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值