java - J2EE și servlet HTTP POST Angular


Am căutat mult pe Google și am încercat toate soluțiile alternative, care erau în mare parte pentru PHP, dar nu a funcționat. Încerc să trimit parametri POST către un servlet j2ee, dar parametrii nu sunt primiți la servlet, deși dacă trimit parametrii atașându-i la URL (GET), reușesc să primesc datele.

Iată codul.

   import { Component } from '@angular/core';
   import { IonicPage, NavController, NavParams } from 'ionic-angular';
   import { Http, Headers, RequestOptions } from '@angular/http';
   import 'rxjs/Rx';
   @IonicPage()
   @Component({
  selector: 'page-login',
  templateUrl: 'login.html',
 })
export class LoginPage {
 userName: string;
password: string;

constructor(public navCtrl: NavController, public navParams: NavParams, 
public http: Http) {
 }

login() {

var headers = new Headers({ 'Content-Type': 'application/json' });

let options = new RequestOptions({ headers: headers });
let devicecode = '1-001-001-009-1';

let postParams = {
  loginid: this.userName,
  password: this.password,
  devicecode: devicecode
}

this.http.post("http://localhost:8092/OCWebService/LoginOSO", postParams
  , options)
  .subscribe(data => {
    console.log(data);
    alert(data);
  }, error => {
    console.log(error);// Error getting the data
  });


    }

   }

Iată codul Servlet:

  protected void processRequest(HttpServletRequest request, 
  HttpServletResponse response)
        throws ServletException, IOException {
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
    response.setContentType("text/html;charset=UTF-8");    

        BufferedReader bf = request.getReader();
        String userName = request.getParameter("loginid");
        String password = request.getParameter("password");
        String deviceCode = request.getParameter("devicecode");
      }

Notă: Sunt nou în Ionic 2.

Răspuns #1

Parametrii (request.getParameter()) sunt doar pentru date application/x-www-form-urlencoded sau pentru parametrii din șirul de interogare. Trimiteți JSON.

Pentru a rezolva problema, poți fie să trimiți application/x-www-form-urlencoded, fie să extragi JSON-ul din fluxul de intrare al cererii și să îl parsezi singur. Va trebui să folosești o bibliotecă precum Jackson pentru aceasta. De exemplu

 InputStream in = request.getInputStream();
 MyPojo pojo = new ObjectMapper().readValue(in, MyPojo.class);

ObjectMapper este o clasă Jackson.