1. Get Dependency Library
Get the struts2-convention-plugin.jar, struts2-json-plugin.jar library.
pom.xml
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts-version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-convention-plugin</artifactId> <version>${struts-version}</version> </dependency> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>${struts-version}</version> </dependency>
2.web.xml
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3. Action (JSON)
This is an Action class which will be converted into JSON format.To output the JSON data, you need to declared a @ParentPackage("json-default"), and result type as “json“.
package org.fool.action.json;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/")
@ParentPackage("json-default")
public class JSONDataAction extends ActionSupport {
private String string1 = "A";
private String[] stringarray1 = { "A1", "B1" };
private int number1 = 123456789;
private int[] numberarray1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
private List<String> list = new ArrayList<String>();
private Map<String, String> map = new HashMap<String, String>();
// no getter method, will not include in the JSON
@SuppressWarnings("unused")
private String string2 = "B";
@Action(value = "getJSONResult", results = { @Result(name = "success", type = "json") })
public String execute() throws Exception {
list.add("list1");
list.add("list2");
list.add("list3");
list.add("list4");
list.add("list5");
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
map.put("key5", "value5");
return SUCCESS;
}
public String getString1() {
return string1;
}
public void setString1(String string1) {
this.string1 = string1;
}
public String[] getStringarray1() {
return stringarray1;
}
public void setStringarray1(String[] stringarray1) {
this.stringarray1 = stringarray1;
}
public int getNumber1() {
return number1;
}
public void setNumber1(int number1) {
this.number1 = number1;
}
public int[] getNumberarray1() {
return numberarray1;
}
public void setNumberarray1(int[] numberarray1) {
this.numberarray1 = numberarray1;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
4. Demo result
Access the action URL, the JSONDataAction’s properties will be converted into JSON format.
http://localhost:8080/Struts2Json/getJSONResult.action
JSON Format
{ "list":["list1","list2","list3","list4","list5"], "map":{"key4":"value4","key3":"value3","key5":"value5","key2":"value2","key1":"value1"}, "number1":123456789, "numberarray1":[1,2,3,4,5,6,7,8,9], "string1":"A", "stringarray1":["A1","B1"] }