第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何在 Play 框架中訪問(wèn) Web 服務(wù) API 時(shí)傳遞可選參數(shù)?

如何在 Play 框架中訪問(wèn) Web 服務(wù) API 時(shí)傳遞可選參數(shù)?

ABOUTYOU 2023-10-13 15:07:30
我是框架新手,正在嘗試集成微服務(wù)。我正在使用 WSClient 來(lái)調(diào)用 Web 服務(wù)。為了調(diào)用 POST Rest API,我傳遞了請(qǐng)求正文,其中包含一些必需參數(shù)和一些可選參數(shù)。我的問(wèn)題是如何在這里傳遞可選參數(shù)?我的代碼示例是def add = Action.async { implicit request =>    UserDataForm.bindFromRequest.fold(      profileForm => {        val response = profileForm.errorsAsJson        Future(BadRequest(response).as("application/json"))      },      userData => try {        ws.url("http://localhost:9000/" + "api/profile")          .post(            Map("userId" -> userData.userId, "firstName" -> userData.firstName, "lastName" -> userData.lastName, "country" -> userData.country, "address" -> userData.address)).map { response =>          OutputWithErrors(response.body, response.status)        }      } catch {        case e: Exception =>          Future(BadRequest(Message(false, e.getMessage).toJson.prettyPrint).as("application/json"))      })  }所以這里address是可選參數(shù)。userData并在此處形成數(shù)據(jù)case class UserForm(userId: String, firstName: String, lastName: String, country: String, address: Option[String])  val UserDataForm = Form(    mapping(      "userId" -> nonEmptyText,      "firstName" -> nonEmptyText,      "lastName" -> nonEmptyText,      "country" -> nonEmptyText,      "address" -> optional(text)    )(UserForm.apply)(UserForm.unapply)  )因此,在ws.url(...)post(Map("userId" -> userData, ...))編譯器附近調(diào)用休息服務(wù) API 時(shí)會(huì)抱怨No implicits found for parameter evidence$2: BodyWritable[Map[String, Serializable]]
查看完整描述

1 回答

?
幕布斯7119047

TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超8個(gè)贊

這里的問(wèn)題是Map你要傳遞給post.?除一項(xiàng)外,所有項(xiàng)均為(String, String),但最后一項(xiàng)為(String, Option[String])。

編譯器現(xiàn)在必須弄清楚該集合的類型可能是什么,并沿著類型層次結(jié)構(gòu)向上移動(dòng)。它能找出的最佳類型是Map[String, Serializable].?因?yàn)檫@是最窄的超類型 String 和 Option 實(shí)現(xiàn)。

這是帖子的定義:

def post[T: BodyWritable](body: T): Future[Response]

您可以看到 T 上存在類型約束,這意味著您需要一個(gè)隱式轉(zhuǎn)換器*來(lái)用于傳遞到 post to 的主體BodyWritable。您可以在DefaultBodyWritables中找到隱式 BodyWritables?。并且沒(méi)有BodyWritable[Map[String, Serializable]]。但有一個(gè)是為了Map[String, String]

你必須選擇:

  1. 更改 Map,使其具有 的類型,可以通過(guò)為viaMap[String, String]提供默認(rèn)值,或者如果地址為 None,則不向地圖添加地址。addressgetOrElse

  2. 為 Map[String, Serialized] 編寫(xiě)一個(gè) BodyWritable。(這可能無(wú)法以令人滿意的方式實(shí)現(xiàn))

我建議你選擇#1。

* 如果這不是此類隱式的正確術(shù)語(yǔ),請(qǐng)糾正我。


查看完整回答
反對(duì) 回復(fù) 2023-10-13
  • 1 回答
  • 0 關(guān)注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)