1

我正在设置一个简单的 API 部分,其中POST通过表单提交接受请求。该表单要求用户选择一个或多个具有相同名称的复选框,例如

<form>
  <input type='text' name='textval'>
  <input type='checkbox' name='cbox' value='val1'> Value 1
  <input type='checkbox' name='cbox' value='val2'> Value 2
  <button type='submit'>Submit</button>
</form>

我正在尝试Spray像这样处理请求:

path("mypath") {
  post {
    formFields('textval, 'cbox) { (textval, cbox) =>
      // Now what?
    }
  }
}

我在Spray Docs中找不到有关如何处理此类输入的文档。事实上,这似乎是一个现已修复的问题,但我不确定如何使用 Spray API 处理此表单字段

4

1 回答 1

0

我找到了一个有点 hacky 的解决方案来满足我的需求。我已经更改了复选框的名称以表示与它们关联的值,并且我在喷涂路线中使用了可选的表单字段

这是我的新表格

<form>
  <input type='text' name='textval'>
  <input type='checkbox' name='cbox1' value='val1'> Value 1
  <input type='checkbox' name='cbox2' value='val2'> Value 2
  <button type='submit'>Submit</button>
</form>

路线相应改变

path("mypath") {
  post {
    formFields('textval, 'cbox1.?, 'cbox2.?) { (textval, cbox1, cbox2) =>
      complete(s"textval:'$textval', cbox1:'$cbox1', cbox2:'$cbox2'")
    }
  }
}

可选字段被映射到类型Option[String],然后可以很容易地检查.isEmpty或类似的东西来确定复选框是否被选中。

但是,一个问题是它允许在不选择复选框的情况下发布表单,因为它们都是可选的。您也许可以将其设置为默认值。

于 2016-04-15T19:55:19.160 回答