J2EE and Angular HTTP POST servlet

3
我已经搜索了很多关于这个问题的解决方案,大多数是关于PHP的,但都不起作用。我正在尝试向j2ee servlet发送POST参数,但是servlet没有接收到参数。虽然如果我将参数与URL(GET)一起发送,则能够接收数据。
以下是代码:
   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
  });


    }

   }

这是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");
      }

注意:我是 Ionic 2 的新手。

你应该发布Servlet代码的堆栈跟踪。 - Trash Can
1个回答

2

参数 (request.getParameter()) 仅适用于 application/x-www-form-urlencoded 数据或查询字符串参数。您正在发送 JSON。

为了解决这个问题,您可以选择发送 application/x-www-form-urlencoded,或从请求输入流中提取 JSON 并自行解析它。您需要使用类似 Jackson 的库来完成此操作。例如:

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

ObjectMapper 是 Jackson 框架中的一个类。


谢谢。非常有效!我使用了第一个解决方案。 - phLamBy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接