天天看點

Dubbo踩坑 -- 不能序列化HttpServletRequest

1. 報錯

這種錯誤在同一dubbo端口下個多個相同服務中是很難發現錯誤具體資訊的,報錯雖然也是

fail invoke method

但是沒有詳細資訊(你靠猜是猜不出來哪裡出問題的),是以最好暫時關閉其它服務,或者申請不同的dubbo端口測試,讓錯誤更準确的暴露出來。

1.1 Post請求報錯:
Dubbo踩坑 -- 不能序列化HttpServletRequest
1.2 控制台報錯:
java.lang.IllegalStateException: 
Serialized class org.springframework.web.multipart.support
.StandardMultipartHttpServletRequest must implement java.io.Serializable
           

2. 原因

查找了一下這個類發現它确實是沒有序列化

public class StandardMultipartHttpServletRequest extends AbstractMultipartHttpServletRequest {...}
           

3. 解決辦法

之是以報這個錯是因為我在web層将HttpServletRequest進行傳值到注冊的服務:

Dubbo踩坑 -- 不能序列化HttpServletRequest

是以解決方法也很簡單:

  1. 将整個業務處理都寫在web服務中。(不規範)
  2. 将有用資訊提取,轉換成可序列化的類型。

其實在HttpServletRequest中對我有用的資訊是擷取到容器的一個路徑,是以将其提取,并修改傳參。

Dubbo踩坑 -- 不能序列化HttpServletRequest

大功告成。

繼續閱讀