簡體   English   中英

無法訪問Struts操作類中的JSON請求對象

[英]Unable to access the JSON request object in struts action class

我正在通過JavaScript函數中的Ajax調用傳遞JSON對象。 我已將生成的動作鏈接到struts動作類。 我在操作類中具有控件,但是未調用我的setter,因此我正面臨NullPointerException

這是我在JavaScript中的Ajax調用

var arr = {entity:entity,subEntity:subEntity,choice:choice,drinkingWaterChosen:drinkingWaterChosen,roadChosen:roadChosen,groupChoice:groupChoice};   
console.log(JSON.stringify(arr));

url = "<s:url action='FetchQuery'/>";
$.ajax({
  type : 'POST',
  url : url,
  dataType : 'json',
  contentType: 'application/json; charset=utf-8',
  data:JSON.stringify(arr),
  async : false,
  success : function(data) {
      console.log(data);
      alert("I am back "+data);
  }
});

我的Struts配置文件如下所示

<struts>
<package name="default" extends="json-default">
    <result-types>
        <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    <interceptors>
        <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
    </interceptors>

    <action name="FetchQuery" class="serp.FetchQuery">
        <result type="json"/>
    </action>
</package>

我的動作課如下

private String entity;//getter and setters for all variables
private String subEntity;
private String choice;
private String drinkingWaterChosen;
private String roadChosen;
private String groupChoice;

public String execute(){

    System.out.println("Hello world>>>>>>>>>>>>>>>>>");
    String msg = constructQuery();
    return msg;
}

private String constructQuery() {

    if (entity.equals("Hello")) {} //Null pointer exception is raised at this line
}

我認為此錯誤是因為未事先設置實體。 所以我的問題是如何處理傳遞給操作類的JSON對象。 我已經在該網站上閱讀了許多問題,並嘗試了所有方法,但是仍然無法找出問題所在。 任何幫助都會很棒。

錯誤可能是您的數組,雙引號丟失了。 將其更改為以下形式:

var arr = {
              'entity' : entity, 
           'subEntity' : subEntity, 
              'choice' : choice,
 'drinkingWaterChosen' : drinkingWaterChosen, 
          'roadChosen' : roadChosen, 
         'groupChoice' : groupChoice
}; 

要處理JSON對象,您需要在操作配置中添加json攔截器。

<action name="FetchQuery" class="serp.FetchQuery">
    <result type="json"/>
  <interceptor-ref name="json">
  <interceptor-ref name="defaultStack">
</action>

json攔截器能夠解析請求,並使用數據填充操作對象。 這是從文檔頁面摘錄的:

如果使用了攔截器,則將從請求中的JSON內容填充該操作,這些是攔截器的規則:

  • “內容類型”必須為“ application / json”
  • JSON內容必須格式正確,請參閱json.org了解語法。
  • 對於必須填充的字段,操作必須具有公共的“ setter”方法。
  • 受支持的人口類型包括:基本體(int,long ... String),日期,列表,地圖,基本體數組,Other類(稍后會詳細介紹)和Other類數組。
  • JSON中要在列表或地圖中填充的任何對象的類型均為Map(從屬性到值的映射),任何整數的類型均為Long,任何十進制數的類型均為Double,並且List類型的任何數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM