Request Normalize 與 Input 契約

對應程式:

這份文件只回答一件事

前端送進來的 payload,進主流程前會被整理成什麼內部格式。

已對齊的 normalize 規則

  • FormSummary 預設為 []
  • FormSummary 先做 rawurldecode
  • iosFormSummary 會 flatten 回 legacy 可接受形狀
  • 每個 Form[...] value 先做 rawurldecode
  • checkbox / multi-select 的 scalar list 會轉成 legacy 下游慣用格式
  • FormSummary 內的 base64 圖片內容會清理
  • QuoteRequest[phone_no] / User[phone] 會做電話 sanitize
  • QuoteRequest[landing_page_url]QuoteRequestLandingPage[*].landing_page_url 會 decode
  • preserve_to_quote_service_id 會對齊到 preserve_quote_service_id
  • match_type 會依 legacy 規則做 clamp

為什麼這層要獨立看

很多 staging case 看起來像 matcher 不一致,實際上是 request parse 已經分岔。

典型症狀:

  • checkbox 題目在 form_summary 變成空陣列
  • language_summary 顯示空白
  • job_center_summary 混進 JSON 字串
  • match_type 與 legacy 不同
  • phone、landing page、region 導致後續條件分岔

測試入口