Ionic 使用 angular HTTP POST 不会在 Android 模拟器上调用 API

Ionic use angular HTTP POST does not call to API on Android Emulator

我有一个 Ionic2 和 spring 启动 api 演示,它在浏览器上运行良好,但是当我 运行 它在 Android 模拟器上并尝试测试时演示,它只适用于 HTTP GET,而 HTTP POST 不会调用 API, 这是我的 HTTP post:

import { Injectable } from '@angular/core';
import { RequestOptions, Headers, Http } from '@angular/http';
import { Events, AlertController } from 'ionic-angular';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class AuthService { 
    /**
     * Constructs the Authentication Service
     * @param {Http} http     
     * @param {Events} events

     */
    constructor(
        private http: Http,       
        private events: Events,       
        private alertCtrl: AlertController        
    ) {}  

    private createHeader(): RequestOptions {
        let options = new RequestOptions();        
        options.headers = new Headers({
            'Accept': 'application/json'
        });
        return options;
    } 

    private login(): Observable<string> {
        let authUrl = 'http://192.168.43.231:8084/api/user/test';
        let data = {'phone':'8888888','password':'abc'}
        return this.http.post(authUrl, JSON.stringify(data), this.createHeader()).map((data: any) => {
            this.presentAlert(data);           
           return '';
        });
    }

presentAlert(data: any) {
    let alert = this.alertCtrl.create({
      title: 'Low battery',
      subTitle: data,
      buttons: ['Dismiss']
    });
    alert.present();
  }
}

我在

中也有代理

ionic.config.json

像那样:

{
  "name": "ionic app",
  "app_id": "",
  "type": "ionic-angular",
  "proxies": [
    {
      "path": "/api",
      "proxyUrl": "http://192.168.43.231:8084/api"
    }
  ],
  "integrations": {
    "cordova": {}
  }
}

我有 api 测试:

@RequestMapping(value = "/api/user/test", method = RequestMethod.POST, produces = {
            MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
    @ResponseBody
    public ResponseEntity<String> test(@RequestBody LoginForm login) {
        System.out.println("This test successful");
        return new ResponseEntity<String>("Test", HttpStatus.OK);
    }

如果我更改 get 函数,它对我有用。

let authUrl = 'http://192.168.43.231:8084/api/user/test';
        return this.http.get(authUrl).map((data: any) => {
            this.presentAlert(data);                     
           return '';
        });
    }

和服务

@RequestMapping(value = "/api/user/test", method = RequestMethod.GET, produces = {
            MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE })
    @ResponseBody
    public ResponseEntity<String> test() {
        System.out.println("This test successful");
        return new ResponseEntity<String>("Test", HttpStatus.OK);
    }

除了您将字符串作为 HTTP POST 的请求正文传递之外,我没有发现您的代码有任何问题。显然,Spring 试图将输入请求主体解析为单个 String 对象,因此找不到任何合适的控制器来处理请求。
将您的 JSON.stringify(data) 替换为 data 对象,您应该没问题。