diff --git a/json-customize/pom.xml b/json-customize/pom.xml
index 61c9badf..4c355256 100644
--- a/json-customize/pom.xml
+++ b/json-customize/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
struts-examples
@@ -15,6 +16,10 @@
UTF-8
+ 3.3
+
+ 4.13.2
+ 5.1.2
@@ -34,13 +39,47 @@
net.sf.flexjson
flexjson
- 3.3
+ ${flexjson.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-slf4j2-impl
+ ${log4j2.version}
+
+
+
+ org.springframework
+ spring-web
+ ${spring-web.version}
+ test
+
+
+
+ net.javacrumbs.json-unit
+ json-unit-assertj
+ ${json-unit-assertj.version}
+ test
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ test
+
+
+
+ org.apache.struts
+ struts2-junit-plugin
+ ${struts2.version}
+ test
junit
junit
- 4.13.2
+ ${junit.version}
test
@@ -63,4 +102,4 @@
-
+
\ No newline at end of file
diff --git a/json-customize/src/main/java/org/demo/ExcludeTransformer.java b/json-customize/src/main/java/org/demo/ExcludeTransformer.java
index e2a8fa10..15e73ed0 100644
--- a/json-customize/src/main/java/org/demo/ExcludeTransformer.java
+++ b/json-customize/src/main/java/org/demo/ExcludeTransformer.java
@@ -3,7 +3,11 @@
import flexjson.transformer.AbstractTransformer;
public class ExcludeTransformer extends AbstractTransformer {
- public void transform(Object o) {
- return;
- }
+ @Override
+ public Boolean isInline() {
+ return true;
+ }
+
+ @Override
+ public void transform(Object o) {}
}
diff --git a/json-customize/src/main/java/org/demo/FlexJSONWriter.java b/json-customize/src/main/java/org/demo/FlexJSONWriter.java
index 7f241397..124a38fd 100644
--- a/json-customize/src/main/java/org/demo/FlexJSONWriter.java
+++ b/json-customize/src/main/java/org/demo/FlexJSONWriter.java
@@ -21,12 +21,11 @@
import flexjson.JSONSerializer;
import flexjson.transformer.DateTransformer;
-import org.apache.struts2.json.JSONException;
-import org.apache.struts2.json.JSONWriter;
-
import java.util.Collection;
import java.util.Date;
import java.util.regex.Pattern;
+import org.apache.struts2.json.JSONException;
+import org.apache.struts2.json.JSONWriter;
/**
* Customized JSONWriter using Flexjson
@@ -41,7 +40,7 @@ public String write(Object object) throws JSONException {
public String write(Object object, Collection excludeProperties, Collection includeProperties,
boolean excludeNullProperties) throws JSONException {
- JSONSerializer serializer = new JSONSerializer();
+ JSONSerializer serializer = new JSONSerializer().exclude("*.class");
if (excludeProperties != null) {
for (Pattern p : excludeProperties) {
serializer = serializer.exclude(p.pattern());
diff --git a/json-customize/src/main/java/org/demo/ProduceAction.java b/json-customize/src/main/java/org/demo/ProduceAction.java
index 8f30ceba..61476c16 100644
--- a/json-customize/src/main/java/org/demo/ProduceAction.java
+++ b/json-customize/src/main/java/org/demo/ProduceAction.java
@@ -19,65 +19,62 @@
package org.demo;
-import org.apache.struts2.ActionSupport;
-
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
+import org.apache.struts2.ActionSupport;
-/**
- * Set welcome message.
- */
+/** Set welcome message. */
public class ProduceAction extends ActionSupport {
- private User user;
+ private User user;
- public String execute() throws Exception {
- user = new User();
+ public String execute() throws Exception {
+ user = new User();
- user.setName("William Shakespeare");
+ user.setName("William Shakespeare");
- SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
- user.setBirthday(formatter.parse("26-Apr-1564"));
+ SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
+ user.setBirthday(formatter.parse("26-04-1564"));
- List phoneNumbers = new ArrayList();
- Phone phone = new Phone();
- phone.setName("cell");
- phone.setNumber("555-123-4567");
- phoneNumbers.add(phone);
- phone = new Phone();
- phone.setName("home");
- phone.setNumber("555-987-6543");
- phoneNumbers.add(phone);
- phone = new Phone();
- phone.setName("work");
- phone.setNumber("555-678-3542");
- phoneNumbers.add(phone);
- user.setPhoneNumbers(phoneNumbers);
+ List phoneNumbers = new ArrayList<>();
+ Phone phone = new Phone();
+ phone.setName("cell");
+ phone.setNumber("555-123-4567");
+ phoneNumbers.add(phone);
+ phone = new Phone();
+ phone.setName("home");
+ phone.setNumber("555-987-6543");
+ phoneNumbers.add(phone);
+ phone = new Phone();
+ phone.setName("work");
+ phone.setNumber("555-678-3542");
+ phoneNumbers.add(phone);
+ user.setPhoneNumbers(phoneNumbers);
- List addresses = new ArrayList();
- Address address = new Address();
- address.setName("home");
- address.setCity("Stratford-upon-Avon");
- address.setStreet("Henley");
- List zipcodes = new ArrayList();
- Zipcode zipcode = new Zipcode();
- zipcode.setCode("CV37");
- zipcodes.add(zipcode);
- address.setZipcodes(zipcodes);
- addresses.add(address);
- user.setAddresses(addresses);
+ List addresses = new ArrayList<>();
+ Address address = new Address();
+ address.setName("home");
+ address.setCity("Stratford-upon-Avon");
+ address.setStreet("Henley");
+ List zipcodes = new ArrayList<>();
+ Zipcode zipcode = new Zipcode();
+ zipcode.setCode("CV37");
+ zipcodes.add(zipcode);
+ address.setZipcodes(zipcodes);
+ addresses.add(address);
+ user.setAddresses(addresses);
- user.setLogin("WillShak");
- user.setHashedPassword("9e107d9d372bb6826bd81d3542a419d6");
- user.setLastLogin(new Date());
- user.setPassword("will123shak456");
+ user.setLogin("WillShak");
+ user.setHashedPassword("9e107d9d372bb6826bd81d3542a419d6");
+ user.setLastLogin(new Date());
+ user.setPassword("will123shak456");
- return SUCCESS;
- }
+ return SUCCESS;
+ }
- public User getUser() {
- return user;
- }
+ public User getUser() {
+ return user;
+ }
}
diff --git a/json-customize/src/main/resources/struts.xml b/json-customize/src/main/resources/struts.xml
index ea30cb45..5f63ddf7 100644
--- a/json-customize/src/main/resources/struts.xml
+++ b/json-customize/src/main/resources/struts.xml
@@ -1,7 +1,7 @@
+ "-//Apache Software Foundation//DTD Struts Configuration 6.0//EN"
+ "http://struts.apache.org/dtds/struts-6.0.dtd">
diff --git a/json-customize/src/main/webapp/WEB-INF/web.xml b/json-customize/src/main/webapp/WEB-INF/web.xml
index 88586569..1a6ee72c 100644
--- a/json-customize/src/main/webapp/WEB-INF/web.xml
+++ b/json-customize/src/main/webapp/WEB-INF/web.xml
@@ -1,9 +1,10 @@
-
- Struts Blank
+
+
+ Struts JSON Customize Example
struts2
diff --git a/json-customize/src/test/java/org/demo/ProduceActionTest.java b/json-customize/src/test/java/org/demo/ProduceActionTest.java
new file mode 100644
index 00000000..214d300c
--- /dev/null
+++ b/json-customize/src/test/java/org/demo/ProduceActionTest.java
@@ -0,0 +1,48 @@
+package org.demo;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+
+import jakarta.servlet.ServletException;
+import java.io.UnsupportedEncodingException;
+import org.apache.struts2.dispatcher.mapper.ActionMapping;
+import org.apache.struts2.junit.StrutsJUnit4TestCase;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ProduceActionTest extends StrutsJUnit4TestCase {
+ private static final Logger log = LoggerFactory.getLogger(ProduceActionTest.class);
+
+ @Test
+ public void getActionMapping() {
+ ActionMapping mapping = getActionMapping("/produce.action");
+ assertNotNull(mapping);
+ assertEquals("/", mapping.getNamespace());
+ assertEquals("produce", mapping.getName());
+ }
+
+ @Test
+ public void executeAction() throws ServletException, UnsupportedEncodingException {
+ String output = executeAction("/produce.action");
+ log.info("output: {}", output);
+
+ assertNotNull(output);
+
+ assertThatJson(output).node("nickname").isAbsent();
+
+ assertThatJson(output).node("name").isEqualTo("William Shakespeare");
+ assertThatJson(output).node("username").isEqualTo("WillShak");
+ assertThatJson(output).node("password").isEqualTo("******");
+ assertThatJson(output).node("birthday").isEqualTo("04/26/1564");
+
+ assertThatJson(output).node("addresses[0].city").isEqualTo("Stratford-upon-Avon");
+ assertThatJson(output).node("addresses[0].name").isEqualTo("home");
+ assertThatJson(output).node("addresses[0].street").isEqualTo("Henley");
+
+ assertThatJson(output).node("addresses").isArray().hasSize(1);
+
+ assertThatJson(output).node("lastLogin").isString().matches("\\d{2}/\\d{2}/\\d{4}");
+ }
+}