0

Utilisation de la version 7.1 d'IBM Mobile First PlatForm J'essaie d'appeler un adaptateur Java depuis l'application iOS à l'aide du code suivant.IBM MobileFirst Envoi d'un corps JSON depuis le SDK iOS vers l'adaptateur Java

[[WLResourceRequest requestWithURL:url method:WLHttpMethodPost] sendWithJSON:@{@"one":@"two"} completionHandler:^(WLResponse *response, NSError *error) { 

    NSLog(@"%@",response); 
    NSLog(@"%@",error); 

    }]; 

La méthode Java côté adaptateur est la suivante.

@POST 
@Consumes("application/json") 
@Produces("application/json") 
public String hello(JSONObject body){ 
    return body.toString(); 
} 

Mais je suis Après erreur en réponse

2016-04-20 11: 31: 15,520 mbs appel [15092: 3787968] Erreur de domaine = com.alamofire.error.serialization.response Code = -1011 "Demande échouée: type de support non pris en charge (415)" UserInfo = {com.alamofire.serialization.response.error.response = {URL: http: /0.0.0.0: 10080/mbs-api/adapteurs/basicadpt/utilisateurs} {code d'état: 415, en-têtes { Connexion = Fermer; "Content-Language" = "en-US"; "Content-Length" = 0; Date = "mer, 20 avril 2016 02:31:15 GMT"; "X-Powered-By" = "Servlet/3.0"; }}, NSErrorFailingURLKey = http://0.0.0.0:10080/mbs-api/adapters/basicadpt/users, com.alamofire.serialization.response.error.data = <>, NSLocalizedDescription = Échec de la demande: le type de média non pris en charge (415)}

Et il semble que dans iOS SDK, il ajoute application/x-www-url-form-urlencoded en requête quand une méthode est appelée.

J'ai deux questions.

  1. Comment passer JSON corps adaptateur Java? Le comportement de sendWithJSON est différent sur iOS et Android. Sur Android, il semble ajouter application/json en-tête lorsque nous appelons l'adaptateur. Est-ce un bug ou une partie du comportement?

Répondre

1

Je crois que c'est un bug. Je pense que l'utilisation de sendWithJSON devrait automatiquement supposer que le type de contenu est application/json.

Je vous suggère d'ouvrir une demande de support (PMR) afin qu'ils puissent améliorer l'expérience.

En attendant, je l'ai trouvé une solution facile:

[request addHeaderValue:@"application/json" forName:@"Content-Type"] 

Ou à Swift:

request.addHeaderValue("application/json", forName: "Content-Type") 
0

J'ai eu ce même problème avec la version cordova d'une application.

var userIDTag = 'some_string'; 
var subTag = [userIDTag]; //<- this worked 
var subTag = userIDTag; //<- this failed with the above error 
var subTag = '[\'' + some_string + '\']'; //<- this also failed with the above error 

Ci-dessous est ce que j'ai fini par faire pour une application Cordova.

function subscribeByTag(userIDTag) { 
    var subTag = [userIDTag]; 
    console.log("subTag: " + subTag); 
    WLAuthorizationManager.obtainAccessToken("push.mobileclient").then(
     MFPPush.subscribe(
      subTag, 
      function(subTag) { 
       navigator.notification.alert("Subscribed successfully"); 
      }, 
      function(failureResponse){ 
       navigator.notification.alert("Failed to subscribe"); 
       console.log("Failedtosubscribe:" + JSON.stringify(failureResponse)); 
      } 
     ) 
    ); 
}