You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2007/11/08 10:17:35 UTC
svn commit: r593088 - in /struts/sandbox/trunk/struts2-rest-plugin/src:
main/java/org/apache/struts2/rest/handler/JsonLibHandler.java
test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java
Author: mrdon
Date: Thu Nov 8 01:17:34 2007
New Revision: 593088
URL: http://svn.apache.org/viewvc?rev=593088&view=rev
Log:
Added handling of json arrays and lists
Modified:
struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/handler/JsonLibHandler.java
struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java
Modified: struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/handler/JsonLibHandler.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/handler/JsonLibHandler.java?rev=593088&r1=593087&r2=593088&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/handler/JsonLibHandler.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/main/java/org/apache/struts2/rest/handler/JsonLibHandler.java Thu Nov 8 01:17:34 2007
@@ -21,9 +21,11 @@
package org.apache.struts2.rest.handler;
import java.io.*;
+import java.util.Collection;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
+import net.sf.json.JSONArray;
/**
* Handles JSON content using json-lib
@@ -37,18 +39,37 @@
while ((len = in.read(buffer)) > 0) {
sb.append(buffer, 0, len);
}
- JSONObject jsonObject = JSONObject.fromObject(sb.toString());
- JSONObject.toBean(jsonObject, target, new JsonConfig());
+ if (target != null && sb.length() > 0 && sb.charAt(0) == '[') {
+ JSONArray jsonArray = JSONArray.fromObject(sb.toString());
+ if (target.getClass().isArray()) {
+ JSONArray.toArray(jsonArray, target, new JsonConfig());
+ } else {
+ JSONArray.toList(jsonArray, target, new JsonConfig());
+ }
+
+ } else {
+ JSONObject jsonObject = JSONObject.fromObject(sb.toString());
+ JSONObject.toBean(jsonObject, target, new JsonConfig());
+ }
}
public String fromObject(Object obj, String resultCode, Writer stream) throws IOException {
if (obj != null) {
- JSONObject jsonObject = JSONObject.fromObject(obj);
- stream.write(jsonObject.toString());
+ if (isArray(obj)) {
+ JSONArray jsonArray = JSONArray.fromObject(obj);
+ stream.write(jsonArray.toString());
+ } else {
+ JSONObject jsonObject = JSONObject.fromObject(obj);
+ stream.write(jsonObject.toString());
+ }
}
return null;
+ }
+
+ private boolean isArray(Object obj) {
+ return obj instanceof Collection || obj.getClass().isArray();
}
public String getContentType() {
Modified: struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java?rev=593088&r1=593087&r2=593088&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java (original)
+++ struts/sandbox/trunk/struts2-rest-plugin/src/test/java/org/apache/struts2/rest/handler/JsonLibHandlerTest.java Thu Nov 8 01:17:34 2007
@@ -25,6 +25,7 @@
import java.io.StringWriter;
import java.io.IOException;
import java.io.StringReader;
+import java.util.Arrays;
public class JsonLibHandlerTest extends TestCase {
@@ -36,6 +37,16 @@
handler.fromObject(contact, "success", writer);
assertEquals("{\"age\":44,\"important\":true,\"name\":\"bob\"}", writer.toString());
+ }
+
+ public void testFromObjectArray() throws IOException {
+ Contact contact = new Contact("bob", true, 44);
+
+ StringWriter writer = new StringWriter();
+ JsonLibHandler handler = new JsonLibHandler();
+ handler.fromObject(Arrays.asList(contact), "success", writer);
+
+ assertEquals("[{\"age\":44,\"important\":true,\"name\":\"bob\"}]", writer.toString());
}
public void testToObject() throws IOException {