尽管采用 json 编码,但不存在必需的参数
Posted
技术标签:
【中文标题】尽管采用 json 编码,但不存在必需的参数【英文标题】:Required parameter not present despite being in json encoding 【发布时间】:2018-03-31 08:14:37 【问题描述】:我正在使用 alamofire 从 swift 发送一个 http post 请求:
let url = userActivity.webpageURL
if(url?.description.contains(UniversalLinkHandler().urlPrefix))!
let keystore = try! EtherKeystore()
let signedOrder = UniversalLinkHandler().parseURL(url: (url?.description)!)
let signature = signedOrder.signature.substring(from: 2)
let parameters: Parameters = [
"address" : keystore.recentlyUsedWallet?.address.description,
"indices": signedOrder.order.indices,
"v" : signature.substring(from: 128),
"r": signature.substring(from: 0, to: 64),
"s": signature.substring(from: 64, to: 128)
]
let query = UniversalLinkHandler.paymentServer
Alamofire.request(
query,
method: .post,
parameters: parameters
).responseJSON
result in
print(result)
索引在调试器中显示为正常的 UInt16 数组,但是当发送到服务器时,它说索引数组不存在
服务器是java,使用springboot:
@RequestMapping(value = "/claimToken", method = RequestMethod.POST)
public ResponseEntity getAToken(@RequestParam(value="address") String address,
@RequestParam(value="indices") int[] indices,
@RequestParam(value = "v") byte v,
@RequestParam(value = "r") String r,
@RequestParam(value = "s") String s
)
第一个参数地址可以正常工作,但它不适用于 int[] 索引数组
非常感谢任何帮助。
【问题讨论】:
signedOrder.order.indices
的类型是什么?
[UInt16] 快速数组
【参考方案1】:
由于是您的 signedOrder.order.indices
数组导致了您的问题,并且这是 [UInt16]
类型,我的建议是:
let indices = signedOrder.order.indices.map(Int.init)
let parameters: Parameters = [
"address" : keystore.recentlyUsedWallet?.address.description,
"indices": indices,
"v" : signature.substring(from: 128),
"r": signature.substring(from: 0, to: 64),
"s": signature.substring(from: 64, to: 128)
]
映射到Int
可以很好地解决您的问题。
【讨论】:
不,它不起作用。此外,由于它被编码为 javascript(JSON 表示法),它是 UInt16 还是 Int 都无关紧要......不过还是谢谢以上是关于尽管采用 json 编码,但不存在必需的参数的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring WebFlux 的 RestController:必需参数不存在
Spring 4 - HTTP 状态 400,必需参数不存在