title: Issue with POST JSON to a Jersey REST service
body: <p>I have a problem with posting JSON to a Jersey REST service - GET is working perfectly but POST seems tricky. I've been working on this problem for awhile now, with no solution so far. Any help is much appreciated!</p>
  
  <p>It seems it cant find the U RL to send the json?Here is what FireBug console shows:</p>
  
  <pre><code>    POST http://localhost:9998/data 400 Bad Request
      Post source: name=Tony
      **Response Headers**
      Connection  close
      Content-Length  0
      Content-Type    text/html; charset=iso-8859-1
      Date    Fri, 20 Apr 2012 10:13:24 GMT
      **Request Headers**
      Accept  application/json, text/javascript, */*; q=0.01
      Accept-Encoding gzip, deflate
      Accept-Language sv-se,sv;q=0.8,en-us;q=0.5,en;q=0.3
      Connection  keep-alive
      Content-Length  9
      Content-Type    application/json; charset=UTF-8
      Host    localhost:9998
      Referer http://localhost:9998/static/page.html
      User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
      X-Requested-With    XMLHttpRequest
  </code></pre>
  
  <p>I'm doing the POST as follows:</p>
  
  <pre><code>&lt;button id='btn' value="knapp" name="knapp" /&gt;
      &lt;script type="text/javascript"&gt;
      $('#btn').click(function(){
          $.ajax({
              url: '/data',
              type: 'POST',
              contentType: 'application/json',
              data: {name:"Tony"},
              dataType: 'json'
          });
      })
  &lt;/script&gt;
  </code></pre>
  
  <p>Javabean class with @XmlRootElement:</p>
  
  <pre><code>@XmlRootElement
  public class StatusBean {
      private String name;
  
      public StatusBean() {
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  }
  </code></pre>
  
  <p>Resource method:</p>
  
  <pre><code>@Path("/data")
  public class PostData {
      @POST
      @Consumes(MediaType.APPLICATION_JSON)
      @Produces(MediaType.APPLICATION_JSON)
      public StatusBean post(StatusBean sb) {
          System.out.println(sb);
          return sb;
      }
  }
  </code></pre>
  
  <p>The server, set up with Grizzly:</p>
  
  <pre><code>public class Main {
      public static final URI BASE_URI = getBaseURI();
  
      public static void main(String[] args) throws IOException {
          HttpServer httpServer = startServer();
  
          Map&lt;String,String&gt; initParams = new HashMap&lt;String, String&gt;();
          initParams.put("com.sun.jersey.config.property.packages", "server");
          SelectorThread selector = GrizzlyWebContainerFactory.create("http://localhost:9998/", initParams );
  
          System.out.println(String.format("Jersey app started with WADL available at "
                  + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...",
                  BASE_URI, BASE_URI));
  
          System.in.read();
          httpServer.stop();
      }
  
      protected static HttpServer startServer() throws IOException {
          System.out.println("Starting grizzly...");
  
          ClassNamesResourceConfig rc = new ClassNamesResourceConfig(PostData.class);
  
  //        rc.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, true);
  
          HttpServer server = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
  
          server.getServerConfiguration().addHttpHandler(new StaticHttpHandler(new File(".").getAbsolutePath()), "/static");
  
          return server;
      }
  
      private static int getPort(int defaultPort) {
          String port = System.getProperty("jersey.test.port");
          if (null != port) {
              try {
                  return Integer.parseInt(port);
              } catch (NumberFormatException e) {
              }
          }
          return defaultPort;
      }
  
      private static URI getBaseURI() {
          return UriBuilder.fromUri("http://localhost/").port(getPort(9998)).build();
      }
  }
  </code></pre>