我正在为学校开发一个 iOS 应用程序。我正在使用数据库,所以我可以稍后运行一些统计数据。我创建了一个 Restful Web 服务来处理我需要的所有功能,并使用 RestKit 来访问 Web 服务。当我需要从 WS 检索数据时,我没有任何问题,但是当我需要发布信息时,我遇到了一些错误,如果可以的话,我希望得到一些帮助。
我在 WS 中创建的 POST 方法是用于向 DB 添加一个新的 Collection,它没有返回,只需添加它。我正在使用 GSON 库从 JSON 转换。我用 netbeans 的“测试器”进行了测试,效果很好,所以我猜问题不在 Web 服务上。我将放置所涉及的类的代码以及尝试发布对象的方法。
我有这门课:收藏
#import <Foundation/Foundation.h>
#import "User.h"
@interface Collection : NSObject
@property NSNumber *idCollection;
@property NSString *name;
@property User *user;
@property NSArray *collectionItens;
@end
而这个类:用户
#import <Foundation/Foundation.h>
@interface User : NSObject
@property NSNumber *idUser;
@property NSString *login;
@property NSString *password;
@end
两个班级都只有@syntezise
这是我试图发布对象的方法:
- (IBAction)createNewCollection:(id)sender
{
NSLog(@"..");
Collection *collection = [[Collection alloc] init];
collection.name = collectionNameTextField.text;
collection.user = [AppDefauts defaultUser];
RKObjectMapping *userMapping = [RKObjectMapping requestMapping];
[userMapping addAttributeMappingsFromArray:@[ @"idUser", @"login", @"password"]];
RKObjectMapping *collectionMapping = [RKObjectMapping requestMapping];
[collectionMapping addAttributeMappingsFromArray:@[ @"idCollection", @"name"]];
[collectionMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"user" toKeyPath:@"user" withMapping:userMapping]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:collectionMapping objectClass:[Collection class] rootKeyPath:@"collection" method:RKRequestMethodAny];
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://localhost:8080/MTGAppWS/webresources"]];
[objectManager addRequestDescriptor:requestDescriptor];
[objectManager postObject:collection path:@"/Collection" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"Success");
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Error");
}];
}
Xcode 上的日志显示错误:
包含新集合的 Web 服务代码
@Path("Collection")
public class CollectionService
{
}
@Context
private UriInfo context;
/**
* Creates a new instance of CollectionService
*/
public CollectionService()
{
}
@PUT
@Consumes("application/json")
public void createNewCollection(String content)
{
CollectionController c= new CollectionController(new SQLController());
Gson gson = new Gson();
JsonParser parser = new JsonParser();
parser.parse(content);
Collection collection = gson.fromJson(content, Collection.class);
c.criarNovaCollection(collection);
}
}
编辑
发现请求没有“去”到正确的地址。
已经解决了这个问题,但现在它发生了另一个错误。(不允许的方法)。
错误信息: http: //pastebin.com/99FiNmQZ