title: How to force Angular2 to POST using x-www-form-urlencoded
body: <p>I have a project that needs to use Angular2 (final) to post to an old, legacy Tomcat 7 server providing a somewhat REST-ish API using .jsp pages.</p>
  <p>This worked fine when the project was just a simple JQuery app performing AJAX requests. However, the scope of the project has grown such that it will need to be rewritten using a more modern framework. Angular2 looks fantastic for the job, with one exception: It refuses to perform POST requests using anything option but as form-data, which the API doesn't extract. The API expects everything to be urlencoded, relying on Java's <code>request.getParameter(&quot;param&quot;)</code> syntax to extract individual fields.</p>
  <p>This is a snipped from my user.service.ts:</p>
  <pre class="lang-js prettyprint-override"><code>import { Injectable }    from '@angular/core';
  import { Headers, Response, Http, RequestOptions } from '@angular/http';
  import { Observable } from 'rxjs/Observable';
  import 'rxjs/add/operator/map';
  
  @Injectable()
  export class UserService {
      private loggedIn = false;
      private loginUrl = 'http://localhost:8080/mpadmin/api/login.jsp';
      private headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
  
      constructor(private http: Http) {}
  
      login(username, password) {
          return this.http.post(this.loginUrl, {'username': username, 'password':  password}, this.headers)
              .map((response: Response) =&gt; {
                  let user = response.json();
                  if (user) {
                      localStorage.setItem('currentUser', JSON.stringify(user));
                  }
              }
          );
      }
  }
  </code></pre>
  <p>No matter what I set the header content type to be, it always ends up arriving as non-encoded form-data. It's not honoring the header I'm setting.</p>
  <p>Has anyone else encountered this? How do you go about forcing Angular2 to POST data in a format that can be read by an old Java API using <code>request.getParameter(&quot;param&quot;)</code>?</p>