Objective C (iOS) для настройки параметров запроса. Нулевая проблема

Я изучаю Джерси и спотыкаюсь от одной проблемы к другой. Я только что получил службу для работы с 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», но это тоже не сработало.


person rishi    schedule 10.09.2014    source источник


Ответы (1)


В вашем Java-коде вы принимаете параметры как FormParam, но при публикации вы отправляете их как часть строки запроса из клиентского кода. Так что либо:

  1. Измените FormParam в коде сервера на QueryParam.
  2. или Измените код клиента, чтобы отправить его в качестве параметров сообщения. Вот пример: Как имитировать отправку HTTP-формы (POST) на iOS
person sukrit007    schedule 15.09.2014