Note that there are some explanatory texts on larger screens.

plurals
  1. POIssue with POST JSON to a Jersey REST service
    text
    copied!<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>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload