60 lines
1.9 KiB
Mathematica
60 lines
1.9 KiB
Mathematica
|
|
/**
|
||
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
||
|
|
* All rights reserved.
|
||
|
|
*
|
||
|
|
* This source code is licensed under the BSD-style license found in the
|
||
|
|
* LICENSE file in the root directory of this source tree.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#import "FBResponseJSONPayload.h"
|
||
|
|
|
||
|
|
#import "FBLogger.h"
|
||
|
|
#import "NSDictionary+FBUtf8SafeDictionary.h"
|
||
|
|
#import "RouteResponse.h"
|
||
|
|
|
||
|
|
@interface FBResponseJSONPayload ()
|
||
|
|
|
||
|
|
@property (nonatomic, copy, readonly) NSDictionary *dictionary;
|
||
|
|
@property (nonatomic, readonly) HTTPStatusCode httpStatusCode;
|
||
|
|
|
||
|
|
@end
|
||
|
|
|
||
|
|
@implementation FBResponseJSONPayload
|
||
|
|
|
||
|
|
- (instancetype)initWithDictionary:(NSDictionary *)dictionary
|
||
|
|
httpStatusCode:(HTTPStatusCode)httpStatusCode
|
||
|
|
{
|
||
|
|
NSParameterAssert(dictionary);
|
||
|
|
if (!dictionary) {
|
||
|
|
return nil;
|
||
|
|
}
|
||
|
|
|
||
|
|
self = [super init];
|
||
|
|
if (self) {
|
||
|
|
_dictionary = dictionary;
|
||
|
|
_httpStatusCode = httpStatusCode;
|
||
|
|
}
|
||
|
|
return self;
|
||
|
|
}
|
||
|
|
|
||
|
|
- (void)dispatchWithResponse:(RouteResponse *)response
|
||
|
|
{
|
||
|
|
NSError *error;
|
||
|
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self.dictionary
|
||
|
|
options:NSJSONWritingPrettyPrinted
|
||
|
|
error:&error];
|
||
|
|
NSCAssert(jsonData, @"Valid JSON must be responded, error of %@", error);
|
||
|
|
if (nil == [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]) {
|
||
|
|
[FBLogger log:@"The incoming data cannot be encoded to UTF-8 JSON. Applying lossy conversion as a workaround."];
|
||
|
|
jsonData = [NSJSONSerialization dataWithJSONObject:[self.dictionary fb_utf8SafeDictionary]
|
||
|
|
options:NSJSONWritingPrettyPrinted
|
||
|
|
error:&error];
|
||
|
|
}
|
||
|
|
NSCAssert(jsonData, @"Valid JSON must be responded, error of %@", error);
|
||
|
|
[response setHeader:@"Content-Type" value:@"application/json;charset=UTF-8"];
|
||
|
|
[response setStatusCode:self.httpStatusCode];
|
||
|
|
[response respondWithData:jsonData];
|
||
|
|
}
|
||
|
|
|
||
|
|
@end
|