国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Feign傳遞文件以及MultipartFile對(duì)象

這篇具有很好參考價(jià)值的文章主要介紹了Feign傳遞文件以及MultipartFile對(duì)象。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

上游服務(wù)提供者

  • 使用spring接收文件可以使用MultipartFile對(duì)象,并同時(shí)使用RequestPart注解標(biāo)識(shí)這個(gè)一個(gè)多媒體參數(shù)。
  • 也就是request的content-Type=multipart/form-data
  • 文件上傳provider代碼:
@PostMapping("/form")
public String formData(@RequestPart("file") MultipartFile multipartFile) {
	multipartFile.getBytes();
}
  • 同時(shí)你可以可以還接收其他參數(shù),例如:
    Feign傳遞文件以及MultipartFile對(duì)象
  • 或者這種形式
    Feign傳遞文件以及MultipartFile對(duì)象

測(cè)試服務(wù)提供者

  • 首先要保證服務(wù)提供者能夠正常接收多媒體MultipartFile文件參數(shù)以及其他的參數(shù)。我這里使用postman測(cè)試,直接看圖:
    Feign傳遞文件以及MultipartFile對(duì)象
  • 使用multipart/form-data的content-Type,并且傳遞一個(gè)文件參數(shù),一個(gè)字符串參數(shù)。
    Feign傳遞文件以及MultipartFile對(duì)象
  • 可以看到文件和字符串參數(shù)都是有值了,也就是服務(wù)提供者是可以調(diào)通的。

下游消費(fèi)者

  • 消費(fèi)者直接通過Feign去調(diào)用文件上傳接口。

  • 在另外一個(gè)項(xiàng)目中定義了一個(gè)FeignClient,并在consumer中直接通過Feign去調(diào)用
    Feign傳遞文件以及MultipartFile對(duì)象
    Feign傳遞文件以及MultipartFile對(duì)象

  • 結(jié)果就是拋出異常


com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.LinkedHashMap["file"]->org.springframework.mock.web.MockMultipartFile["inputStream"])
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1276) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:400) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:728) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeFields(MapSerializer.java:808) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializeWithoutTypeInfo(MapSerializer.java:764) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:720) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.std.MapSerializer.serialize(MapSerializer.java:35) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:400) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1510) ~[jackson-databind-2.12.5.jar:2.12.5]
	at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1006) ~[jackson-databind-2.12.5.jar:2.12.5]
	at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:454) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:104) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.cloud.openfeign.support.SpringEncoder.checkAndWrite(SpringEncoder.java:195) ~[spring-cloud-openfeign-core-3.0.4.jar:3.0.4]
	at org.springframework.cloud.openfeign.support.SpringEncoder.encodeWithMessageConverter(SpringEncoder.java:124) ~[spring-cloud-openfeign-core-3.0.4.jar:3.0.4]
	at org.springframework.cloud.openfeign.support.SpringEncoder.encode(SpringEncoder.java:114) ~[spring-cloud-openfeign-core-3.0.4.jar:3.0.4]
	at feign.ReflectiveFeign$BuildFormEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:358) ~[feign-core-10.12.jar:na]
	at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:232) ~[feign-core-10.12.jar:na]
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:84) ~[feign-core-10.12.jar:na]
	at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:100) ~[feign-core-10.12.jar:na]
	at com.sun.proxy.$Proxy85.formData(Unknown Source) ~[na:na]
	at com.maple.cloud10feignconsumer.controller.ConsumerController.form(ConsumerController.java:59) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_131]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_131]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_131]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.12.jar:5.3.12]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.54.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.12.jar:5.3.12]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.12.jar:5.3.12]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:41002) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.54.jar:9.0.54]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]


  • 看這個(gè)異常信息可能看不出什么,其實(shí)就是因?yàn)镕eign在構(gòu)建請(qǐng)求報(bào)文的時(shí)候,content-type不對(duì)導(dǎo)致的。圖片說的很清楚了,建議認(rèn)真看。
    Feign傳遞文件以及MultipartFile對(duì)象

異常原因

  • 也就是是說,F(xiàn)eign在調(diào)用時(shí),沒有給content-type導(dǎo)致報(bào)錯(cuò),而且這個(gè)報(bào)錯(cuò)是在下游服務(wù)構(gòu)建報(bào)文時(shí),是沒有請(qǐng)求到上游服務(wù)的。
  • 那么解決方案也就是往RequestTemplateheader中設(shè)置content-type=multipart/form-data就好了。

錯(cuò)誤解決方案

  1. header中既然沒有content-type,那就設(shè)置一個(gè)進(jìn)去不就好了,但是很遺憾,RequestTemplate是一個(gè)具體的類,而不是一個(gè)接口,沒有提供很好的擴(kuò)展進(jìn)制。
  2. 你可能想到了RequestInterceptor,請(qǐng)求攔截器,feign在調(diào)用其他服務(wù)之前會(huì)先走攔截器。在攔截器中添加content-type不就好了。
  3. 但是很遺憾,RequestTemplate的body報(bào)文組裝編碼是在攔截器之前,話不說說,看代碼。
通過Feign調(diào)用接口,來到j(luò)dk動(dòng)態(tài)代理的invoke方法,拿到分發(fā)器,執(zhí)行invoke邏輯。

Feign傳遞文件以及MultipartFile對(duì)象

invoke方法:構(gòu)建ReuqestTemplate以及請(qǐng)求報(bào)文,執(zhí)行并解密,執(zhí)行請(qǐng)求攔截器。

Feign傳遞文件以及MultipartFile對(duì)象文章來源地址http://www.zghlxwxcb.cn/news/detail-441694.html

  • 可以很清晰的看到,是先構(gòu)建了ReuqestTemplate的請(qǐng)求報(bào)文,然后在執(zhí)行的攔截器;正常流程在構(gòu)建請(qǐng)求報(bào)文編碼就報(bào)錯(cuò)了。

可行的解決方案

  • 需要重新思考一個(gè)添加content-type的可行時(shí)機(jī)。Feign傳遞文件以及MultipartFile對(duì)象
  • 可以看到,F(xiàn)eign在執(zhí)行解析編碼的時(shí)候,是通過SpringEncoder去編碼,獲取content-type的。那我們就可以自己去創(chuàng)建一個(gè)Encoder去替換容器中的SpringEncoder,然后在編碼之前,往RequestTemplate的header中添加content-type,或者重寫encode的邏輯。
  • 接下來就是要看這個(gè)SpringEncoder是從哪里來的。
尋找SpringEncoder來源
  • SpringEncoder的獲取是在容器啟動(dòng)時(shí)創(chuàng)建的,核心代碼如下
    Feign傳遞文件以及MultipartFile對(duì)象
  • 也就是在Ioc容器中獲取,那么現(xiàn)在要做的,就是找到他是何時(shí)加入到容器的。
    Feign傳遞文件以及MultipartFile對(duì)象
  • 通過調(diào)用棧可以發(fā)現(xiàn)SpringEncoder是通過配置類的@Bean,調(diào)用其他方法創(chuàng)建的。那我們就可以覆蓋這個(gè)SpringEncoder,注冊(cè)自己的Encoder對(duì)象。
注冊(cè)自定義Encoder
  • 直接模擬spring的創(chuàng)建方式即可。
package com.maple.cloud10feignconsumer.config;

import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.AbstractFormWriter;
import org.springframework.cloud.openfeign.support.FeignEncoderProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author maple
 * @date 2022/12/29 16:08
 * desc:
 */

@Configuration
public class EncoderConfiguration {

    @Autowired(required = false)
    private FeignEncoderProperties encoderProperties;

    @Autowired
    private ObjectFactory<HttpMessageConverters> messageConverters;

    @Bean
    @ConditionalOnMissingBean
    @ConditionalOnMissingClass("org.springframework.data.domain.Pageable")
    public Encoder feignEncoder(ObjectProvider<AbstractFormWriter> formWriterProvider) {
        return mapleEncoder(formWriterProvider, encoderProperties);
    }


    private Encoder mapleEncoder(ObjectProvider<AbstractFormWriter> formWriterProvider,
                                  FeignEncoderProperties encoderProperties) {
            return new MapleEncoder(new SpringFormEncoder(), this.messageConverters, encoderProperties);

    }
}

編寫自定義Encoder
  • encode的邏輯也就是在調(diào)用SpringEncoder之前,往RequestTemplate中添加content-type。那么什么時(shí)候能夠添加content-type,就是我們需要思考的問題,因?yàn)槲覀儾荒苡绊懫渌腇eignClient使用。
  • 我的方案是使用自定義注解,標(biāo)識(shí)這是一個(gè)多媒體文件上傳接口,需要添加content-type,然后在下游FeignClient中標(biāo)記,并在自定義的Encoder中掃描。
自定義文件上傳接口標(biāo)識(shí)注解
package com.maple.cloud10feignconsumer.config;

import java.lang.annotation.*;

/**
 * @author maple
 * @date 2022/12/29 16:37
 * desc:
 */


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FormData {
}

  • 并在FeignClient中標(biāo)記
    Feign傳遞文件以及MultipartFile對(duì)象
編寫encode邏輯
  • 并在encode中掃描
package com.maple.cloud10feignconsumer.config;

import feign.RequestTemplate;
import feign.codec.EncodeException;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.cloud.openfeign.support.FeignEncoderProperties;
import org.springframework.cloud.openfeign.support.SpringEncoder;

import java.lang.reflect.Type;

/**
 * @author maple
 * @date 2022/12/29 15:56
 * desc:
 */

public class MapleEncoder extends SpringEncoder {


    public MapleEncoder(ObjectFactory<HttpMessageConverters> messageConverters) {
        super(messageConverters);
    }

    public MapleEncoder(SpringFormEncoder springFormEncoder, ObjectFactory<HttpMessageConverters> messageConverters) {
        super(springFormEncoder, messageConverters);
    }

    public MapleEncoder(SpringFormEncoder springFormEncoder, ObjectFactory<HttpMessageConverters> messageConverters, FeignEncoderProperties encoderProperties) {
        super(springFormEncoder, messageConverters, encoderProperties);
    }

    @Override
    public void encode(Object requestBody, Type bodyType, RequestTemplate request) throws EncodeException {
        // 是表單請(qǐng)求,則添加header【content-type=multipart/form-data】
        if (request.methodMetadata().method().isAnnotationPresent(FormData.class)) {
            request.header("content-type", "multipart/form-data");
        }

        // 執(zhí)行SpringEncoder的邏輯
        super.encode(requestBody, bodyType, request);
    }
}

測(cè)試

  • 可以看到,現(xiàn)在解析編碼就是我自定義的Encoder。
    Feign傳遞文件以及MultipartFile對(duì)象
  • 然后如果是文件上傳請(qǐng)求,就會(huì)在header中添加content-type。
    Feign傳遞文件以及MultipartFile對(duì)象
  • 然后也就能夠成功的調(diào)用到上游服務(wù)了,并且獲取數(shù)據(jù)。
    Feign傳遞文件以及MultipartFile對(duì)象

總結(jié)

  1. 通過Feign直接去調(diào)用上游的文件上傳服務(wù),會(huì)報(bào)錯(cuò),原因是因?yàn)?code>RequestTemplate的header中沒有content-type,會(huì)導(dǎo)致錯(cuò)誤的編碼請(qǐng)求報(bào)文。
  2. 通過自定義Encoder繼承SpringEncoder并重寫encode方法,在編碼之前添加content-type。
  3. 并不是所有的Feign調(diào)用都需要自己添加conent-type,所有需要標(biāo)記一下接口,例如自定義注解。

到了這里,關(guān)于Feign傳遞文件以及MultipartFile對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot用MultipartFile.transferTo傳遞相對(duì)路徑的問題

    SpringBoot用MultipartFile.transferTo傳遞相對(duì)路徑的問題

    問題描述: 打算給自己的項(xiàng)目添加一個(gè)上傳文件保存功能,于是我使用MultipartFile.transferTo()來完成這個(gè)功能,由于我的項(xiàng)目要部署到服務(wù)器,所以我使用了相對(duì)路徑把上傳的文件保存到當(dāng)前項(xiàng)目的工作目錄下,但是報(bào)錯(cuò)了?。ń^對(duì)路徑可以正常使用,找了一下午沒弄明白,第

    2024年01月23日
    瀏覽(17)
  • vue3中父組件與組件之間參數(shù)傳遞,使用(defineProps/defineEmits),涉及屬性傳遞,對(duì)象傳遞,數(shù)組傳遞,以及事件傳遞

    傳遞屬性 父組件: 子組件: 傳遞對(duì)象或者數(shù)組 父組件: 子組件: 父組件: 子組件:

    2024年02月13日
    瀏覽(21)
  • postman同時(shí)傳遞文件和對(duì)象參數(shù)

    postman同時(shí)傳遞文件和對(duì)象參數(shù)

    ?對(duì)象屬性 ?BaseInfoReqDTO BaseInfo? postman測(cè)試 { \\\"baseInfo\\\": { \\\"funcFlag\\\": \\\"ZT066\\\", \\\"transNo\\\": \\\"201208021201010001\\\", \\\"transrDate\\\": \\\"2012-08-17\\\", \\\"transrTime\\\": \\\"13:43:40\\\", \\\"operator\\\": \\\"C\\\", \\\"fromSys\\\": \\\"1\\\", \\\"toSys\\\": \\\"1\\\", \\\"sourceId\\\": \\\"1\\\" }, \\\"taskCode\\\": \\\"123456789\\\", \\\"isReinsuredLetters\\\": \\\"N\\\", \\\"reinsuredResult\\\": \\\"1\\\", \\\"isReinsured\\\": \\\"Y\\\" } @RequestPart和@

    2024年02月06日
    瀏覽(26)
  • 前端傳遞對(duì)象參數(shù),以及后端接受參數(shù) @PathVariable @RequestParam @RequestBody 注解的使用

    前端傳遞對(duì)象參數(shù),以及后端接受參數(shù) @PathVariable @RequestParam @RequestBody 注解的使用

    太久沒寫前后端傳遞參數(shù)了,總是格式對(duì)不上號(hào) 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 拼接在 url 地址中的 后端 前端 api 調(diào)用請(qǐng)求 拼接在 url 地址后面的 后端 前端 api 調(diào)用請(qǐng)求 放在請(qǐng)求頭當(dāng)中 后端 前端 api 調(diào)用請(qǐng)求 前端傳遞對(duì)象,后端接收對(duì)象 放在請(qǐng)求體中的

    2023年04月26日
    瀏覽(26)
  • SpringCloud -Token傳遞之Feign

    SpringCloud -Token傳遞之Feign

    ?? 個(gè)人主頁: 楊永杰825_Spring,Mysql,多線程-CSDN博客 ? 每日一句:成為架構(gòu)師路途遙遠(yuǎn) ?? 歡迎大家:關(guān)注 ?? +點(diǎn)贊 ?? +評(píng)論??+ 收藏?? 目錄 方法一 @RequestHeader 方法二 使用Feign的Interceptor 步驟一 實(shí)現(xiàn)RequestInterceptor接口 步驟二:配置Feign 通常微服務(wù)對(duì)于用戶認(rèn)證信息解析

    2024年02月04日
    瀏覽(14)
  • feign微服務(wù)之間傳遞請(qǐng)求頭數(shù)據(jù)

    feign微服務(wù)之間傳遞請(qǐng)求頭數(shù)據(jù)

    直接在微服務(wù)遠(yuǎn)程調(diào)用中獲取請(qǐng)求頭數(shù)據(jù)不能直接獲取到.為什么? 看源碼 默認(rèn)情況下feign遠(yuǎn)程調(diào)用的時(shí)候不會(huì)傳遞請(qǐng)求頭! 遠(yuǎn)程調(diào)用源碼: 每一次遠(yuǎn)程請(qǐng)求的時(shí)候都創(chuàng)建了一個(gè)新的Request Template對(duì)象,在該對(duì)象中不包含之前的請(qǐng)求頭數(shù)據(jù) 解決方案: 方案一:在feign接口上添加對(duì)應(yīng)

    2024年02月06日
    瀏覽(20)
  • vue前端傳遞文件夾以及其他參數(shù)到后臺(tái)

    vue前端傳遞文件夾以及其他參數(shù)到后臺(tái)

    前端 1、前端通過FormData進(jìn)行傳遞,代碼如下 后端 2、后端通過如下方式進(jìn)行接收和解析 注意:如果后端接收不到數(shù)據(jù),或者前端沒有執(zhí)行請(qǐng)求方法,考慮可能是定義的函數(shù)名沖突導(dǎo)致,更改函數(shù)名重試即可 可能需要的方法

    2024年03月23日
    瀏覽(19)
  • Http遠(yuǎn)程調(diào)用(feign客戶端通過POST傳遞FORM格式數(shù)據(jù))

    Http遠(yuǎn)程調(diào)用(feign客戶端通過POST傳遞FORM格式數(shù)據(jù))

    目錄 ? ? ??feign實(shí)現(xiàn)http遠(yuǎn)程調(diào)用(正文) ??????解決方案: 在正式講解HTTP遠(yuǎn)程調(diào)用時(shí),我們先來了解一下缺省方法的定義。 寫在前面: 缺省參數(shù)可傳可不傳,可以傳多個(gè)但他們必須是相同的類型 每個(gè)方法中缺省參數(shù)只能定義一個(gè),并且只能在參數(shù)的最后定義; 缺省參

    2023年04月08日
    瀏覽(24)
  • Java 【dubbo rpc改feign調(diào)用】解決調(diào)用服務(wù)提供方無法傳遞完整參數(shù)問題

    【框架改造問題點(diǎn)記錄,dubbo改為spring cloud alibaba】 【第二篇】feign接口異常解決 【描述】多參數(shù)情況下,調(diào)用服務(wù)提供方無法傳遞完整參數(shù)、改@SpringQueryMap原因是會(huì)將實(shí)體自動(dòng)拆分為拼接參數(shù)。目前只遇到多參數(shù):實(shí)體和單參數(shù)情況,持續(xù)更新… 匯總: 1.多個(gè)普通參數(shù),

    2024年02月16日
    瀏覽(35)
  • MultipartFile實(shí)現(xiàn)文件上傳功能

    MultipartFile實(shí)現(xiàn)文件上傳功能

    MultipartFile是spring類型,代表HTML中form data方式上傳的文件,包含二進(jìn)制數(shù)據(jù)+文件名稱。在文件上傳這方面能幫助我們快速簡潔實(shí)現(xiàn)。 1、yml配置文件 2、API介紹 3、文件上傳示例 注意: @RequestPart(\\\"file\\\") 主要用來處理content-type為 multipart/form-data 或 multipart/mixed stream 發(fā)起的請(qǐng)求,

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包