Я изучаю Джерси и спотыкаюсь от одной проблемы к другой. Я только что получил службу для работы с Java-клиентом (после некоторой помощи от кого-то здесь). Класс обслуживания следующий:
@Path("/user")
public class UserService extends AbstractService {
private static final NouLogger logger = NouLogger
.getLogger(UserService.class);
@Path("fbregister")
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String createNewFBUser(@FormParam("fbuserid") String userid,
@FormParam("fbmailid") String emailId,
@FormParam("fbfullname") String fullName,
@FormParam("fbusertoken") String userToken,
@Context HttpServletResponse servletResponse) throws IOException,
DatabaseException {
final String methodName = "createNewFBUser";
User user = new User();
user.setEmail(emailId);
user.setName(fullName);
user.setFacebookSecret(userToken);
Session session = null;
try {
session = getSession();
} catch (DatabaseException e) {
final String message = "Error occurred while fetching session.";
logger.error(methodName, message, e);
e.printStackTrace();
}
UserDAO userDAO = DAOFactory.DEFAULT.buildUserDAO();
Transaction txn = session.beginTransaction();
userDAO.save(user);
txn.commit();
closeSession();
return user.getId().toString();
}
}
Это отлично работает, когда я вызываю его из Java-клиента. Но когда я вызываю его из кода iOS, я получаю все нулевые значения для всех параметров. Код iOS выглядит следующим образом:
// To encode parameter.
NSString *fb_userid = [user objectForKey:@"id"];
NSString *fb_mailid = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)[user objectForKey:@"email"], NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8 ));
NSString *fb_fullname = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)user.name, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8 ));
NSString *fbAccessToken = [[[FBSession activeSession] accessTokenData] accessToken];
NSLog(@"user = %@", user);
NSLog(@"fb_userid = %@", fb_userid);
NSLog(@"fb_mailid = %@", fb_mailid);
NSLog(@"fb_fullname = %@", fb_fullname);
// To send url Request.
NSString *url1 =[NSString stringWithFormat:@"http://myip:8080/nou/rest/user/fbregister?fbuserid=%@&fbmailid=%@&fbfullname=%@&fbusertoken=%@", fb_userid, fb_mailid, fb_fullname, fbAccessToken];
NSURL *url = [NSURL URLWithString:url1];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
[theRequest setHTTPMethod:@"POST"];
theConnection1 = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
Любая идея, почему это происходит? Я поставил его на удаленную отладку, я также мог видеть вызываемый метод, моя запись в БД была создана, но в нее были помещены все нулевые значения. Помогите мне решить эту проблему.
ИЗМЕНИТЬ:
Я попытался отправить только один параметр «id», но это тоже не сработало.