Создайте структуру запроса следующим образом.
Swift
struct Request: Codable {
let podID, type, timeStamp: String
let url: String
enum CodingKeys: String, CodingKey {
case podID = "pod_id"
case type
case timeStamp = "time_stamp"
case url
}
}
Создайте объект Struct и установите все значения.JSON Кодировать объект запроса при передаче его в API следующим образом.
let httpBody = try JSONEncoder().encode(request)
apiRequest.body = httpBody
Убедитесь, что Content-Type в заголовках ApiRequest установлен как "application / json"
Content-Type : application/json
Таким образом,Вы можете передать JSON как запрос в вызовах API REST.
Objective-C
Request.h
@class TESTRequest;
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Object interfaces
@interface TESTRequest : NSObject
@property (nonatomic, copy) NSString *podID;
@property (nonatomic, copy) NSString *type;
@property (nonatomic, copy) NSString *timeStamp;
@property (nonatomic, copy) NSString *url;
+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error;
- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error;
- (NSData *_Nullable)toData:(NSError *_Nullable *)error;
@end
NS_ASSUME_NONNULL_END
Request.m
NS_ASSUME_NONNULL_BEGIN
#pragma mark - Private model interfaces
@interface TESTRequest (JSONConversion)
+ (instancetype)fromJSONDictionary:(NSDictionary *)dict;
- (NSDictionary *)JSONDictionary;
@end
#pragma mark - JSON serialization
TESTRequest *_Nullable TESTRequestFromData(NSData *data, NSError **error)
{
@try {
id json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:error];
return *error ? nil : [TESTRequest fromJSONDictionary:json];
} @catch (NSException *exception) {
*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
return nil;
}
}
TESTRequest *_Nullable TESTRequestFromJSON(NSString *json, NSStringEncoding encoding, NSError **error)
{
return TESTRequestFromData([json dataUsingEncoding:encoding], error);
}
NSData *_Nullable TESTRequestToData(TESTRequest *request, NSError **error)
{
@try {
id json = [request JSONDictionary];
NSData *data = [NSJSONSerialization dataWithJSONObject:json options:kNilOptions error:error];
return *error ? nil : data;
} @catch (NSException *exception) {
*error = [NSError errorWithDomain:@"JSONSerialization" code:-1 userInfo:@{ @"exception": exception }];
return nil;
}
}
NSString *_Nullable TESTRequestToJSON(TESTRequest *request, NSStringEncoding encoding, NSError **error)
{
NSData *data = TESTRequestToData(request, error);
return data ? [[NSString alloc] initWithData:data encoding:encoding] : nil;
}
@implementation TESTRequest
+ (NSDictionary<NSString *, NSString *> *)properties
{
static NSDictionary<NSString *, NSString *> *properties;
return properties = properties ? properties : @{
@"pod_id": @"podID",
@"type": @"type",
@"time_stamp": @"timeStamp",
@"url": @"url",
};
}
+ (_Nullable instancetype)fromData:(NSData *)data error:(NSError *_Nullable *)error
{
return TESTRequestFromData(data, error);
}
+ (_Nullable instancetype)fromJSON:(NSString *)json encoding:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
{
return TESTRequestFromJSON(json, encoding, error);
}
+ (instancetype)fromJSONDictionary:(NSDictionary *)dict
{
return dict ? [[TESTRequest alloc] initWithJSONDictionary:dict] : nil;
}
- (instancetype)initWithJSONDictionary:(NSDictionary *)dict
{
if (self = [super init]) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
- (void)setValue:(nullable id)value forKey:(NSString *)key
{
id resolved = TESTRequest.properties[key];
if (resolved) [super setValue:value forKey:resolved];
}
- (NSDictionary *)JSONDictionary
{
id dict = [[self dictionaryWithValuesForKeys:TESTRequest.properties.allValues] mutableCopy];
// Rewrite property names that differ in JSON
for (id jsonName in TESTRequest.properties) {
id propertyName = TESTRequest.properties[jsonName];
if (![jsonName isEqualToString:propertyName]) {
dict[jsonName] = dict[propertyName];
[dict removeObjectForKey:propertyName];
}
}
return dict;
}
- (NSData *_Nullable)toData:(NSError *_Nullable *)error
{
return TESTRequestToData(self, error);
}
- (NSString *_Nullable)toJSON:(NSStringEncoding)encoding error:(NSError *_Nullable *)error
{
return TESTRequestToJSON(self, encoding, error);
}
@end