gpt4 book ai didi

ios - 无法处理成功的 204 响应并使用 RestKit 正确映射失败的响应

转载 作者:可可西里 更新时间:2023-11-01 04:47:31 25 4
gpt4 key购买 nike

我正在编写一个 iOS 应用程序,它与服务交互以更新用户的个人资料。为了更新用户名,iOS 应用程序使用以下格式的正文 PUT 请求:

 {"name" : {"first" : "FIRSTNAMEGOESHERE", "lastName":"LASTNAMEGOESHERE"}}

在请求正文有效的情况下(即同时提供名字和姓氏),服务返回 204(无内容)状态代码和空响应正文。

如果请求正文无效(例如缺少名字等),服务将返回状态代码 400 和以下格式的响应正文:

{"code":"ERRORCODEHERE"}

iOS 应用程序正在使用 RestKit,我一直无法弄清楚如何让它正确处理成功和失败的情况。如果我使用这个:

- (void)updateUserName
{
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[[NSURL alloc] initWithString:@"http://someqaserver:8080"]];
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];

RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromDictionary:@{@"firstName" : @"first", @"lastName" : @"last"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping objectClass:[OurUser class] rootKeyPath:@"name"];

[objectManager addRequestDescriptor:requestDescriptor];

[objectManager putObject:[OurUser getCurrentUser]
path:@"/mobile/profile/name"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
{
NSLog(@"Success!");
}
failure:^(RKObjectRequestOperation *operation, NSError *error)
{
NSLog(@"Fail!");
}];
}

这显然不适用于错误情况,但在从服务器返回 204 的情况下它确实成功执行了成功 block 。

如果我在调用 putObject 之前添加以下代码,则错误处理有效,但现在有效的 204 情况被视为失败:

    RKObjectMapping *errorMapping = [RKObjectMapping mappingForClass:[ServiceError class]];
[errorMapping addAttributeMappingsFromDictionary:@{@"code" : @"errorCode"}];
RKResponseDescriptor *errorDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:errorMapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassClientError)];
[objectManager addResponseDescriptor:errorDescriptor];

这似乎是因为接受的 HTTP 状态代码现在设置为所提供的响应描述符的状态代码,而 204 不是其中之一(或者可能是其他东西?)

我怎样才能得到它以便:1.) 如果返回 204,则视为成功2.) 如果返回 4XX,则视为失败并且错误代码已正确映射到我的 ServiceError 对象?

在此先感谢您提供的任何帮助。

最佳答案

问题也通过添加一个响应描述符来处理 204 来解决:

RKResponseDescriptor *successResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[RKObjectMapping mappingForClass:nil]
method:RKRequestMethodPUT
pathPattern:nil
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[manager addResponseDescriptor:successResponseDescriptor];

关于ios - 无法处理成功的 204 响应并使用 RestKit 正确映射失败的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15348037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com