Browse Source

Minor optimizations to the way the /json response is created.

* reuse the IResource - it is stateless so it can be reused thread safely
* use Content-Length response header
Martin Tzvetanov Grigorov 11 years ago
parent
commit
be69dfb788

+ 5 - 2
wicket/src/main/java/hellowicket/HelloJsonReference.java

@@ -1,11 +1,14 @@
 package hellowicket;
 
-import org.apache.wicket.request.resource.*;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.ResourceReference;
 
 public class HelloJsonReference extends ResourceReference
 {
   private static final long serialVersionUID = 1L;
 
+  private final HelloJsonResponse resource = new HelloJsonResponse();
+
   public HelloJsonReference()
   {
     super(HelloJsonReference.class, "json");
@@ -14,6 +17,6 @@ public class HelloJsonReference extends ResourceReference
   @Override
   public IResource getResource()
   {
-    return new HelloJsonResponse();
+    return resource;
   }
 }

+ 18 - 13
wicket/src/main/java/hellowicket/HelloJsonResponse.java

@@ -1,31 +1,36 @@
 package hellowicket;
 
 import java.io.IOException;
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.wicket.request.resource.AbstractResource;
-import com.fasterxml.jackson.databind.*;
+import org.apache.wicket.util.collections.MiniMap;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class HelloJsonResponse extends AbstractResource
 {
-	private static final long serialVersionUID = 1L;
-	
-	private static final ObjectMapper mapper = new ObjectMapper();
+  private static final long serialVersionUID = 1L;
+
+  private static final String CONTENT_TYPE = "application/json";
+  private static final ObjectMapper mapper = new ObjectMapper();
 
-	protected ResourceResponse newResourceResponse(Attributes attributes)
-	{
-    ResourceResponse response = new ResourceResponse();
-    response.setContentType("application/json");
-    response.setWriteCallback(new WriteCallback() {
+  protected ResourceResponse newResourceResponse(Attributes attributes)
+  {
+    final ResourceResponse response = new ResourceResponse();
+    response.setContentLength(26);
+    response.setContentType(CONTENT_TYPE);
+    response.setWriteCallback(new WriteCallback()
+    {
       public void writeData(Attributes attributes)
       {
-        Map<String, String> data = new HashMap<String, String>();
+        Map<String, String> data = new MiniMap<>(1);
         data.put("message", "Hello, world");
 
         try
         {
-          attributes.getResponse().write(HelloJsonResponse.mapper.writeValueAsString(data));
+            String json = HelloJsonResponse.mapper.writeValueAsString(data);
+            attributes.getResponse().write(json);
         }
         catch (IOException ex)
         {
@@ -34,5 +39,5 @@ public class HelloJsonResponse extends AbstractResource
       }
     });
     return response;
-	}
+  }
 }