BaseServlet: Extract method for custom GsonBuilder initialization

Subclasses may want domain-specific initialization, such as
registering custom type adapters, including type adapters that may
vary per request.

Change-Id: I8e594be97428534afd94209633e07ec6503b3842
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 6f1f247..846c3c1 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -225,16 +225,19 @@
     res.setStatus(SC_OK);
 
     Writer writer = getWriter(res);
-    new GsonBuilder()
-      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
-      .setPrettyPrinting()
-      .generateNonExecutableJson()
-      .create()
-      .toJson(src, typeOfSrc, writer);
+    newGsonBuilder(req).create().toJson(src, typeOfSrc, writer);
     writer.write('\n');
     writer.close();
   }
 
+  @SuppressWarnings("unused") // Used in subclasses.
+  protected GsonBuilder newGsonBuilder(HttpServletRequest req) throws IOException {
+    return new GsonBuilder()
+      .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
+      .setPrettyPrinting()
+      .generateNonExecutableJson();
+  }
+
   /**
    * @see #startRenderText(HttpServletRequest, HttpServletResponse)
    * @param req in-progress request.