Struts 2 註解實現Action返回JSON數據

Struts 2 註解實現返回JSON數據

所需Struts 2依賴:

  • struts2-core
  •  struts2-convention-plugin
  • struts2-json-plugin

    如果你使用Maven,需要引入下列依賴:

   

<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.5.14.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-convention-plugin</artifactId>
			<version>2.5.14.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>2.5.14.1</version>
		</dependency>

JsonAction

    創建JsonAction類的目的只有一個就是爲了簡化其子類的註解配置,子類只需繼承它即可。代碼如下:

 

import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;

@ParentPackage("json-default")
@Result(type="json")
public abstract class JsonAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	protected Map<Object,Object> resultMap;
	{
		resultMap = new HashMap<>();
	}
	public Map<Object, Object> getResultMap() {
		return resultMap;
	}
	public void setResultMap(Map<Object, Object> resultMap) {
		this.resultMap = resultMap;
	}
	
}

    解釋:

  •     @ParentPackage("json-default")

      我在這個類上添加了@ParentPackage("json-default")的註解,它的作用相當於在struts.xml配置文件中配置 <packageextends="json-default">讓這個包繼承於json-default包,這個是必須的

  • @Result(type="json")

      這個註解是配置Action類返回的結果,相當於在struts.xml中配置action節點下的result

<action >
   <resulttype="json"> </result>
</action>
  • resultMap屬性

    這個屬性用於封裝返回的結果。Struts 2會自動將它轉換爲JSON字符串返回。

    我在這個類中使用了初始化代碼塊來初始化這個屬性。

{

           resultMap = new HashMap<>();

  }

     這個不是必須的,因爲你可以在子類中去初始化它。但是最好還是在這兒去初始化它,可以避免在子類忘記初始化而造成的空指針異常。無論如何你在使用resultMap屬性之前都要初始化它。

UserLoginAction

import java.util.Map;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.json.annotations.JSON;

import com.gyb.struts04.action.JsonAction;

@Namespace("/user")
public class UserLoginAction extends JsonAction {
	private static final long serialVersionUID = 1L;
	
	@Action(value="/login")
	@Override
	public String execute() throws Exception {
		resultMap.put("hello", "world");
		resultMap.put("data", new Integer[] {1,2,3});
		return SUCCESS;
	}
	
	@JSON(name="rs")
	public Map<Object, Object> getResultMap() {
		return resultMap;
	}
	
}

    解釋:

  • @Namespace(“/user”)

        這個註解相當於在struts.xml中配置package節點的namespace屬性,值爲/user。

  • @Action(value="/login")

      這個註解相當於在struts.xml中配置action節點的name屬性,值爲/login。

      我們需要這樣訪問這個Action類:http://localhost:8080/[項目名]/user/login

  •   更重要的一步:

         我們需要重寫父類中的getResultMap()方法。否則無法將json數據返回到前臺。

         我們在這個方法上加上了@JSON(name="rs")註解,目的是將其序列化爲JSON格式的數據,並由Struts2返回。

         我們在execute()方法中向resultMapput了幾個元素。這些數據最終都會返回到前臺。任何需要返回到前臺的數據都可以放入resultMap對象。

測試運行:

啓動項目,在瀏覽器中訪問:http://localhost:8080/[項目名]/user/login,將看到下面的JSON數據:

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章