使用Alamofire发送请求时,官方api中Parameters的格式必须为[String: Any],如果想要直接提交json数组格式,应该如何提交呢?
/// A dictionary of parameters to apply to a `URLRequest`.
public typealias Parameters = [String: Any]
open func request(_ convertible: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil,
interceptor: RequestInterceptor? = nil,
requestModifier: RequestModifier? = nil) -> DataRequest {
let convertible = RequestConvertible(url: convertible,
method: method,
parameters: parameters,
encoding: encoding,
headers: headers,
requestModifier: requestModifier)
return request(convertible, interceptor: interceptor)
废话不多说,直接上代码:
- 对Array扩展,通过特定的key值来记录json数组格式的提交;
- ArrayEncoding通过对ParameterEncoding协议的实现,从而将json数组转化为Data格式来提交请求。
import Foundation
import Alamofire
private let arrayParametersKey = "arrayParametersKey"
/// Extenstion that allows an array be sent as a request parameters
extension Array {
/// Convert the receiver array to a `Parameters` object.
func asParameters() -> Parameters {
return [arrayParametersKey: self]
/// Convert the parameters into a json array, and it is added as the request body.
/// The array must be sent as parameters using its `asParameters` method.
public struct ArrayEncoding: ParameterEncoding {
/// The options for writing the parameters as JSON data.
public let options: JSONSerialization.WritingOptions
/// Creates a new instance of the encoding using the given options
/// - parameter options: The options used to encode the json. Default is `[]`
/// - returns: The new instance
public init(options: JSONSerialization.WritingOptions = []) {
self.options = options
public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest {
var urlRequest = try urlRequest.asURLRequest()
guard let parameters = parameters,
let array = parameters[arrayParametersKey] else {
return urlRequest
let data = try JSONSerialization.data(withJSONObject: array, options: options)
if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil {
urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.httpBody = data
} catch {
throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error))
return urlRequest
let values = ["06786984572365", "06644857247565", "06649998782227"]
AF.request(url,
method: .post,
parameters: values.asParameters(),
encoding: ArrayEncoding())
来源:https://stackoverflow.com/questions/27026916/sending-json-array-via-alamofire
使用Alamofire发送请求时,官方api中Parameters的格式必须为[String: Any],如果想要直接提交json数组格式,应该如何提交呢?/// A dictionary of parameters to apply to a `URLRequest`.public typealias Parameters = [String: Any]open func request(_ convertible: URLConvertible, met
var jsonstr=[{'name':'a','value':1},{'name':'b','value':2}];
var jsonarray = eval('('+jsonstr+')');
var arr =
name : $('#names').val(),
value : $('#values').val()
jsonarray.push(arr);
var json={};// 定义一个json
java后台接受ajax传的json数据,json数据又有对象,数组。
所有总结下springmvc获取前端传来的json数据方式:
1、以RequestParam接收
前端传来的是json数据不多时:[id:id],可以直接用@RequestParam来获取值
@Autowired
private AccomodationService accomodationService;
@RequestMapping(value = "/update")
@ResponseBody
public String
使用Alamofire实现了JSON数据的获取
首先是导入Alamofire包 前往https://github.com/Alamofire/Alamofire获取最新版本
解压完成后将其中的Alamofire.xcodeproj文件copy到你的工程文件下 然后在工程的General -> Embedded Binaries点击+号 导入iOS用的Alamofire框架 后面改为option
iOS网络请求以JSON的格式上传
在网络开发中请求方式都是以POST或者GET的方式来请求数据,在处理参数的时候都是封装在一个字典里面,然后用AFNetworking或者Alamofire框架提交服务器处理的
let param = ["param1": "value1", "param2": "value2"]
alamofireNetWorking("url", param: param
// Created by Seasons on 2019/5/17.
import Foundation
import Alamofire
typealias SuccessBlock = ([String:Any]) -> Void
服务端给的接口,需要将参数以application/json的格式,作为请求体,以post请求的方式传给服务端。
项目的网络请求框架是封装的Alamofire,业务层只需要构建业务对应的Request和Response即可。业务代码大致如下:
class Request: WowRequest<Respone> {
var countInfo: Bool = false
var page: Int = 0
Alamofire是IOS开发时高效的网络第三方工具库,有时我们需要将本地的一些数据调用API上传到云端,再接收处理完成后的结果,在这个过程中,最终我们需要的信息是以JSON串进行返回的。
下面,我将以一个单词信息查询API为例,演示Alamofire的使用方法。
首先列出该API返回的JSON串格式:
"word": "cell",
"accent": "/sel/",
"mean_cn": "n.\u7ec6\u80de\uff1b\u5c0f\u9694\u95f4",
相关文章系列:(文章代码均已升级至Swift3)
[当前文章] Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
Swift - HTTP网络
Alamofire Tutorial,敬请勘误。
AFNetworking是 iOS 和 OS X 上最受欢迎的第三方库之一。它曾在我们的2012年的读者评选中荣获2012年度最佳
iOS 库称号。它同样也在 Github 上面获得了14000多个
stars 和4000多
let image = UIImage(named: "xxx")
//将图片转化为JPEG类型的data 后面的参数是压缩比例
let jpegImage = UIImageJPEGRepresentation(image!, 0.5)
//要传的参数(比如我们带用户的加密uid)
let u...
目前公司的Swift项目网络请求使用的是第三方开源库Alamofire,在使用的过程中有遇到过2种参数格式无法正确传递到后端的情况;
1)参数包含空数组
直接会被过滤删除掉
2)参数包含二维数组
会把二维数组转换为一维数组
下面将结合Alamofire参数编码部分的源码来一步一步的分析为啥不满足这2种参数格式。
1、首先看下实际结果
这里有必要先说下测试接口使用 httpbin.org来进行测试的好处;因为它在被调用后可以返回服务端所接收到的所有参数;在我们这里仅仅调试参数,所以比使用抓包工具要更方便一些,
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile
BetterThanNever:
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile
chokshen:
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile
weixin_43035060:
Alamofire提交json数组格式的参数
生命不止,奋斗不息:
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile
码农晨仔: