You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/01/08 14:03:00 UTC
svn commit: r1556522 - in /struts/struts2/trunk/plugins/json/src:
main/java/org/apache/struts2/json/ test/java/org/apache/struts2/json/
Author: lukaszlenart
Date: Wed Jan 8 13:02:59 2014
New Revision: 1556522
URL: http://svn.apache.org/r1556522
Log:
WW-4185 makes default json date format configurable
Added:
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/SingleDateBean.java
Modified:
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java
struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java
struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java
Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java?rev=1556522&r1=1556521&r2=1556522&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java Wed Jan 8 13:02:59 2014
@@ -84,6 +84,7 @@ public class JSONResult implements Resul
private boolean enumAsBean = JSONWriter.ENUM_AS_BEAN_DEFAULT;
private boolean noCache = false;
private boolean excludeNullProperties = false;
+ private String defaultDateFormat = null;
private int statusCode;
private int errorCode;
private String callbackParameter;
@@ -199,7 +200,8 @@ public class JSONResult implements Resul
}
protected String createJSONString(HttpServletRequest request, Object rootObject) throws JSONException {
- String json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy, enumAsBean, excludeNullProperties);
+ String json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy,
+ enumAsBean, excludeNullProperties, defaultDateFormat);
json = addCallbackIfApplicable(request, json);
return json;
}
@@ -443,4 +445,13 @@ public class JSONResult implements Resul
public void setEncoding(String encoding) {
this.encoding = encoding;
}
+
+ public String getDefaultDateFormat() {
+ return defaultDateFormat;
+ }
+
+ @Inject(required=false,value="struts.json.dateformat")
+ public void setDefaultDateFormat(String defaultDateFormat) {
+ this.defaultDateFormat = defaultDateFormat;
+ }
}
Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java?rev=1556522&r1=1556521&r2=1556522&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java Wed Jan 8 13:02:59 2014
@@ -29,21 +29,9 @@ import org.apache.struts2.json.annotatio
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
+import java.io.*;
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.regex.Pattern;
import java.util.zip.GZIPOutputStream;
@@ -104,15 +92,18 @@ public class JSONUtil {
* root object
* @param enumAsBean
* whether to serialized enums a Bean or name=value pair
+ * @param defaultDateFormat
+ * date format used to serialize dates
* @return JSON string
* @throws JSONException
*/
public static String serialize(Object object, Collection<Pattern> excludeProperties,
- Collection<Pattern> includeProperties, boolean ignoreHierarchy, boolean enumAsBean,
- boolean excludeNullProperties) throws JSONException {
+ Collection<Pattern> includeProperties, boolean ignoreHierarchy, boolean enumAsBean,
+ boolean excludeNullProperties, String defaultDateFormat) throws JSONException {
JSONWriter writer = new JSONWriter();
writer.setIgnoreHierarchy(ignoreHierarchy);
writer.setEnumAsBean(enumAsBean);
+ writer.setDateFormatter(defaultDateFormat);
return writer.write(object, excludeProperties, includeProperties, excludeNullProperties);
}
Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java?rev=1556522&r1=1556521&r2=1556522&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java Wed Jan 8 13:02:59 2014
@@ -608,6 +608,12 @@ public class JSONWriter {
this.enumAsBean = enumAsBean;
}
+ public void setDateFormatter(String defaultDateFormat) {
+ if (defaultDateFormat != null) {
+ this.formatter = new SimpleDateFormat(defaultDateFormat);
+ }
+ }
+
protected static class JSONAnnotationFinder {
private boolean serialize = true;
private Method accessor;
Modified: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java?rev=1556522&r1=1556521&r2=1556522&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java (original)
+++ struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONResultTest.java Wed Jan 8 13:02:59 2014
@@ -32,6 +32,7 @@ import org.springframework.mock.web.Mock
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -170,6 +171,23 @@ public class JSONResultTest extends Stru
assertEquals(normalizedExpected, normalizedActual);
}
+ public void testCustomDateFormat() throws Exception {
+ JSONResult result = new JSONResult();
+ result.setDefaultDateFormat("MM-dd-yyyy");
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
+
+ SingleDateBean dateBean = new SingleDateBean();
+ dateBean.setDate(sdf.parse("2012-12-23 10:10:10 GMT"));
+
+ stack.push(dateBean);
+
+ this.invocation.setAction(dateBean);
+ result.execute(this.invocation);
+
+ String out = response.getContentAsString();
+ assertEquals("{\"date\":\"12-23-2012\"}", out);
+ }
+
public void testPrefixAndSuffix() throws Exception {
JSONResult result = new JSONResult();
result.setWrapPrefix("_prefix_");
Modified: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java?rev=1556522&r1=1556521&r2=1556522&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java (original)
+++ struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONWriterTest.java Wed Jan 8 13:02:59 2014
@@ -5,9 +5,11 @@ import org.apache.struts2.json.annotatio
import org.apache.struts2.json.bridge.StringBridge;
import org.junit.Test;
-import java.util.Map;
-import java.util.LinkedHashMap;
import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TimeZone;
public class JSONWriterTest extends StrutsTestCase{
@Test
@@ -100,4 +102,34 @@ public class JSONWriterTest extends Stru
this.url = url;
}
}
+
+ @Test
+ public void testCanSerializeADate() throws Exception {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
+
+ SingleDateBean dateBean = new SingleDateBean();
+ dateBean.setDate(sdf.parse("2012-12-23 10:10:10 GMT"));
+
+ JSONWriter jsonWriter = new JSONWriter();
+ jsonWriter.setEnumAsBean(false);
+
+ TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
+ String json = jsonWriter.write(dateBean);
+ assertEquals("{\"date\":\"2012-12-23T10:10:10\"}", json);
+ }
+
+ @Test
+ public void testCanSetDefaultDateFormat() throws Exception {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
+
+ SingleDateBean dateBean = new SingleDateBean();
+ dateBean.setDate(sdf.parse("2012-12-23 10:10:10 GMT"));
+
+ JSONWriter jsonWriter = new JSONWriter();
+ jsonWriter.setEnumAsBean(false);
+ jsonWriter.setDateFormatter("MM-dd-yyyy");
+ String json = jsonWriter.write(dateBean);
+ assertEquals("{\"date\":\"12-23-2012\"}", json);
+ }
+
}
Added: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/SingleDateBean.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/SingleDateBean.java?rev=1556522&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/SingleDateBean.java (added)
+++ struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/SingleDateBean.java Wed Jan 8 13:02:59 2014
@@ -0,0 +1,16 @@
+package org.apache.struts2.json;
+
+import java.util.Date;
+
+public class SingleDateBean {
+
+ private Date date;
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+}