下面展示一些 内联代码片
。
feign客户端部分,注意对象是怎么和文件一起封装的
// An highlighted block
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Response<AttachmentRelationDto> uploadFile(@SpringQueryMap AttOperateDataDto data,
@RequestPart("file") MultipartFile file);
@ApiOperation("上传附件")
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public Response<AttachmentRelationDto> uploadFile(AttOperateData data,
@RequestPart("file") MultipartFile file)
下面展示一些 内联代码片
。
引入 spring form
// An highlighted block
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import feign.Feign;
import feign.Logger.Level;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.FeignClientsConfiguration;
import org.springframework.cloud.openfeign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Configuration
@ConditionalOnClass({Feign.class})
@Import({FeignClientsConfiguration.class})
@AutoConfigureBefore({FeignAutoConfiguration.class})
public class FeignClientConfig {
@Autowired
private FeignClientsConfiguration feignClientsConfiguration;
@Autowired
private FeignClientConfig.OkHttpClientConfig clientConfig;
@Autowired
private ObjectFactory<HttpMessageConverters> messageConverters;
public FeignClientConfig() {
}
@Bean
@Scope("prototype")
@Primary
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(this.messageConverters));
}
@Bean
public Level feignLoggerLevel() {
return Level.FULL;
}
@Component
class OkHttpClientConfig {
@Value("${dream.okhttp.readTimeout}")
private long readTimeout;
@Value("${dream.okhttp.connectTimeout}")
private long connectTimeout;
@Value("${dream.okhttp.writeTimeout}")
private long writeTimeout;
@Value("${dream.okhttp.maxIdleConnections}")
private int maxIdleConnections;
@Value("${dream.okhttp.keepAliveDuration}")
private long keepAliveDuration;
OkHttpClientConfig() {
}
public long getReadTimeout() {
return this.readTimeout;
}
public void setReadTimeout(long readTimeout) {
this.readTimeout = readTimeout;
}
public long getConnectTimeout() {
return this.connectTimeout;
}
public void setConnectTimeout(long connectTimeout) {
this.connectTimeout = connectTimeout;
}
public long getWriteTimeout() {
return this.writeTimeout;
}
public void setWriteTimeout(long writeTimeout) {
this.writeTimeout = writeTimeout;
}
public int getMaxIdleConnections() {
return this.maxIdleConnections;
}
public void setMaxIdleConnections(int maxIdleConnections) {
this.maxIdleConnections = maxIdleConnections;
}
public long getKeepAliveDuration() {
return this.keepAliveDuration;
}
public void setKeepAliveDuration(long keepAliveDuration) {
this.keepAliveDuration = keepAliveDuration;
}
}
}
feignFormEncoder是这里传输能够成功的关键