最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringCloud Feign傳遞HttpServletRequest對象流程

 更新時間:2023年05月19日 10:59:25   作者:小白的救贖  
HttpServletRequest接口的對象代表客戶端的請求,當(dāng)客戶端通過HTTP協(xié)議訪問Tomcat服務(wù)器時,HTTP請求中的所有信息都封裝在HttpServletRequest接口的對象中,這篇文章介紹了Feign傳遞HttpServletRequest對象的流程,感興趣的同學(xué)可以參考下文

這里我的業(yè)務(wù)場景是:在請求頭中獲取服務(wù)端登錄時傳給客戶端的token,并且客戶端將token放在請求頭中。以至于我需要在參數(shù)傳遞上傳入HttpServletRequest。如果你非要向我一樣傳入HttpServletRequest對象那么就往下看,當(dāng)然你如果可以改成其他參數(shù)傳遞就不需要往下看了。

使用Feign所需要的必需知識別忘記:

一、需要在調(diào)用方以及被調(diào)用方以及Feign接口模塊引入依賴

二、被調(diào)用方與調(diào)用方的主啟動類均需要加上@EnableFeignClients注解

三、被調(diào)用方的注解后面還需要加掃描路徑,對于我本人項目則是@EnableFeignClients(basePackages = "com.chf")

四、被調(diào)用方的控制層(Controller)的方法需要是public。因為寫在Feign接口中的方法就是默認(rèn)的public static final。所以說兩個的訪問權(quán)限修飾符必須是一致的。

五、將被調(diào)用方的方法copy到Feign接口中,這里需要注意三點:

  • 1、在@RequestMapper/REST風(fēng)格的請求路徑中需要被調(diào)用方的全路徑名。
  • 2、Feign接口需要兩個注解:@Component以及@FeignClient。
  • 3、@FeignClient注解中需要加上被調(diào)用方的服務(wù)名稱("spring:application:name")

feign.codec.EncodeException: Could not write JSON: getInputStream() has already been called for this request; nested exception is com.fasterxml.jackson.databind.JsonMappingException: getInputStream() has already been called for this request (through reference chain: org.apache.catalina.connector.RequestFacade["reader"])
    at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:376)
    at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:224)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:75)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
    at com.sun.proxy.$Proxy81.concertCount(Unknown Source)
    at com.chf.service.impl.ApiEChartsServiceImpl.ticketCount(ApiEChartsServiceImpl.java:25)
    at com.chf.controller.api.ApiEChartsController.ticketCount(ApiEChartsController.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: getInputStream() has already been called for this request; nested exception is com.fasterxml.jackson.databind.JsonMappingException: getInputStream() has already been called for this request (through reference chain: org.apache.catalina.connector.RequestFacade["reader"])
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:296)
    at org.springframework.http.converter.AbstractGenericHttpMessageConverter.writeInternal(AbstractGenericHttpMessageConverter.java:113)
    at org.springframework.http.converter.AbstractHttpMessageConverter.write(AbstractHttpMessageConverter.java:227)
    at org.springframework.cloud.openfeign.support.SpringEncoder.encode(SpringEncoder.java:114)
    at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:372)
    ... 56 more
Caused by: com.fasterxml.jackson.databind.JsonMappingException: getInputStream() has already been called for this request (through reference chain: org.apache.catalina.connector.RequestFacade["reader"])
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:394)
    at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:353)
    at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:316)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:729)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
    at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1433)
    at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:921)
    at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:287)
    ... 60 more
Caused by: java.lang.IllegalStateException: getInputStream() has already been called for this request
    at org.apache.catalina.connector.Request.getReader(Request.java:1208)
    at org.apache.catalina.connector.RequestFacade.getReader(RequestFacade.java:504)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:721)
    ... 66 more

報這個錯誤的原因主要是:Feign沒有接受HttpServletRequest參數(shù)。以下三點是處理這個問題的解決辦法。

一、在Feign模塊中寫一個配置類實現(xiàn)RequestInterceptor重寫apply()方法。

二、修改Feign接口中的兩處地方。

三、在調(diào)用方調(diào)用Feign接口地方改為請求頭中的參數(shù)。

@Component
public class FeignConfig implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        requestTemplate.header("token",request.getHeader("token"));
    }
}
@Component
// 第一處更改的位置:加上configuration
@FeignClient(value = "service:application:name",configuration = FeignConfig.class)
public interface FeignClient {
    @GetMapping("全路徑名")
    // 第二處更改的位置:加上@RequestHeader注解并且?guī)闲枰恼埱箢^類型
    Integer count(@RequestHeader("token") String token);
}
@Service
public class AServiceImpl implements AService {
    @Autowired
    private FeignClient feignClient;
    @Override
    public Integer personCount(HttpServletRequest request) {
        String token = request.getHeader("token");
        return feignClient.count(token);
    }
}

到此這篇關(guān)于SpringCloud Feign傳遞HttpServletRequest對象流程的文章就介紹到這了,更多相關(guān)SpringCloud傳遞HttpServletRequest內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的ArrayList(擴容機制)詳解

    Java中的ArrayList(擴容機制)詳解

    ArrayList作為Java中廣泛使用的動態(tài)數(shù)組,其擴容機制是保證性能和內(nèi)存使用平衡的關(guān)鍵,默認(rèn)初始容量為10,擴容因子為1.5,旨在減少頻繁的內(nèi)存分配和數(shù)據(jù)遷移代價,同時建議使用預(yù)估計的初始化容量以減少擴容次數(shù)
    2024-11-11
  • SpringBoot指定激活配置文件的方法

    SpringBoot指定激活配置文件的方法

    Spring Boot 對多環(huán)境整合已經(jīng)有了很好的支持,能夠在運行間、打包時自由切換環(huán)境,這篇文章主要介紹了SpringBoot指定激活配置文件,需要的朋友可以參考下
    2023-11-11
  • java實現(xiàn)讀寫json文件的示例詳解

    java實現(xiàn)讀寫json文件的示例詳解

    隨著現(xiàn)代應(yīng)用對數(shù)據(jù)交換和配置管理需求的增加,JSON(JavaScript Object Notation)已成為最流行的數(shù)據(jù)格式之一,本文將為大家全面展示 Java 讀寫 JSON 文件的端到端流程,需要的小伙伴可以了解下
    2025-05-05
  • SpringBootTest報錯的問題解決

    SpringBootTest報錯的問題解決

    本文主要介紹了SpringBootTest報錯的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Spring IOC 三種配置方式詳解

    Spring IOC 三種配置方式詳解

    這篇文章主要介紹了Spring IOC 三種配置方式,基于xml配置方式組件管理,基于注解方式管理和配置類方式管理,這三種方式,通過圖文講解的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • iOS多線程介紹

    iOS多線程介紹

    這篇文章主要介紹了iOS多線程的相關(guān)知識,涉及到對進程,線程等方面的知識講解,本文非常具有參考價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn)

    本文主要介紹了springboot項目使用Disruptor做內(nèi)部消息隊列的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java基礎(chǔ)之反射詳解

    Java基礎(chǔ)之反射詳解

    這篇文章主要介紹了教你怎么通過IDEA設(shè)置堆內(nèi)存空間,文中有非常詳細(xì)的代碼示例,對正在使用IDEA的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • Spring?Security實現(xiàn)用戶名密碼登錄詳解

    Spring?Security實現(xiàn)用戶名密碼登錄詳解

    這篇文章主要為大家詳細(xì)介紹了Spring Security如何實現(xiàn)用戶名密碼登錄功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-10-10
  • SpringMvc自動裝箱及GET請求參數(shù)原理解析

    SpringMvc自動裝箱及GET請求參數(shù)原理解析

    這篇文章主要介紹了SpringMvc自動裝箱及GET請求參數(shù)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09

最新評論

保山市| 宜兰市| 会东县| 高雄市| 堆龙德庆县| 商河县| 仁寿县| 靖江市| 青河县| 鄂尔多斯市| 普洱| 日照市| 启东市| 西平县| 永安市| 昌宁县| 石门县| 延津县| 莆田市| 云林县| 萝北县| 定结县| 迁西县| 锦屏县| 西乌珠穆沁旗| 额尔古纳市| 罗平县| 饶平县| 灵石县| 津市市| 曲周县| 海林市| 永福县| 庄浪县| 永和县| 射洪县| 和静县| 定州市| 滦南县| 三亚市| 铁岭市|