java - struts 中的 JSON 响应

标签 java json struts2 struts-config

我已按如下方式定义了操作的结果类型。

<package name="nonrest-actions" extends="struts-default,json-default"
    namespace="/service">


    <action name="waterUsageByAggregation" class="action.nonrest.WaterUsageAction"
        method="usageBreakUp">
        <result name="success" type="json" >
            <param name="root">usageBreakUp</param>
            <param name="noCache">true</param>
        </result>
        <result name="success">NotImplemented.html</result>
        <result name="input">NotImplemented.html</result>
    </action>

</package>

我的 Action 类有以下成员

// input parameters
private int storageId;
private Date fromDate;
private Date toDate;
private int aggregationId;

// Output
private Map<String, String> usageBreakUp = new HashMap<>();

但是我得到的 JSON 响应并非源于 usageBreakUp

    {
   "actionErrors":[

   ],
   "actionMessages":[

   ],
   "aggregationId":2,
   "errorMessages":[

   ],
   "errors":{

   },
   "fieldErrors":{

   },
   "fromDate":null,
   "locale":{
      "ISO3Country":"USA",
      "ISO3Language":"eng",
      "country":"US",
      "displayCountry":"United States",
      "displayLanguage":"English",
      "displayName":"English (United States)",
      "displayScript":"",
      "displayVariant":"",
      "extensionKeys":[

      ],
      "language":"en",
      "script":"",
      "unicodeLocaleAttributes":[

      ],
      "unicodeLocaleKeys":[

      ],
      "variant":""
   },
   "storageId":1,
   "texts":null,
   "toDate":null,
   "usageBreakUp":{
      "3rd Floor":"20",
      "Ist Floor":"20",
      "4th Floor":"40",
      "2nd Floor":"20"
   }
}

我在这里缺少什么?

编辑:这是我的整个 Action 类

public class WaterUsageAction extends ActionSupport
{
    private final static int NO_DATA = -1;

    /**
     * Action method which gives the break up of water usage amongst child
     * aggregations
     */

    // Input parameters
    private int storageId;
    private Date fromDate;
    private Date toDate;
    private int aggregationId;

    // Output
    private Map<String, String> usageBreakUp = new HashMap<>();

    // http://localhost:8080/SWNBackend/service/waterUsageByAggregation.json?aggregationId=2&storageId=1
    public String usageBreakUp()
    {
        AggregationDAO aggregationDAO = new AggregationDAO();
        Aggregation aggregation = aggregationDAO.findByIdLazy(aggregationId);

        for (int childAggregationId : aggregation.getAggregationIds())
        {
            Aggregation childAggregation = aggregationDAO
                    .findByIdLazy(childAggregationId);
            String usageString = String.valueOf(getUsage(
                    childAggregation.getId(), fromDate, toDate));
            if (usageString.equals(String.valueOf(NO_DATA)))
                usageString = "No Data";
            usageBreakUp.put(childAggregation.getName(), usageString);
        }
        return SUCCESS;
    }

    /*************************************************************************/

    /**
     * Calculates water usage for the specified aggregation in the specified
     * time frame
     * 
     * @param aggregationId
     * @param from
     * @param to
     * @return
     */
    private int getUsage(int aggregationId, Date from, Date to)
    {
        int usage = 0;

        // The nodes through which water flows into this aggregation
        List<SWNNode> entryNodes = WaterNetwork.getInstance().getEntryNodes(
                aggregationId);
        if (entryNodes.isEmpty())
            throw new RuntimeException(
                    "SWN configuration error : No entry points for aggregation "
                            + aggregationId);

        for (SWNNode entryNode : entryNodes)
        {
            int tmpUsage = getUsage(entryNode, from, to);
            if (tmpUsage == NO_DATA)
                return NO_DATA;
            usage += tmpUsage;
        }
        return usage;
    }

    /**
     * Calculates water usage w.r.t to the flow through the specified node
     * 
     * @param entryNode
     * @param from
     * @param to
     * @return
     */
    private int getUsage(SWNNode entryNode, Date from, Date to)
    {
        // Base case
        if (entryNode.getAsset().hasFlowSensor())
        {
            return 20;
            // TODO : ImplementSensorsDataDAO
            /*
             * return (new SensorsDataDAO()).getFlowData(entryNode.getAsset()
             * .getFlowSensorId(), fromDate, toDate);
             */
        }
        else if (entryNode.getChildren().isEmpty())
            return NO_DATA;

        // Recursively find the usage
        int usage = 0;
        for (SWNNode node : entryNode.getChildren())
        {
            int tmpUsage = getUsage(node, from, to);
            if (tmpUsage == NO_DATA)
                return NO_DATA;
            usage += tmpUsage;
        }
        return usage;
    }

    public Map<String, String> getUsageBreakUp()
    {
        return usageBreakUp;
    }

    public void setUsageBreakUp(Map<String, String> usageBreakUp)
    {
        this.usageBreakUp = usageBreakUp;
    }

    public int getStorageId()
    {
        return storageId;
    }

    public void setStorageId(int storageId)
    {
        this.storageId = storageId;
    }

    public Date getFromDate()
    {
        return fromDate;
    }

    public void setFromDate(Date fromDate)
    {
        this.fromDate = fromDate;
    }

    public Date getToDate()
    {
        return toDate;
    }

    public void setToDate(Date toDate)
    {
        this.toDate = toDate;
    }

    public int getAggregationId()
    {
        return aggregationId;
    }

    public void setAggregationId(int aggregationId)
    {
        this.aggregationId = aggregationId;
    }
}

编辑:查找来源here .

最佳答案

编辑

您已为您的操作定义了两倍的 SUCCESS 结果。

关于java - struts 中的 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26892906/

相关文章:

java - 如何在完成所有字段验证后重定向 zk 另一个页面?

json - 如何解码mongodb数据以构造

javascript - 我的 $.getJSON 似乎没有从我的 JSON 文件中检索信息

java - JSON 解析错误 : Cannot deserialize instance of com. Finance.biblioteca.service.dto.LibroDTO 超出 START_ARRAY token ;

java - 装饰多客户端 webapp

java - Struts2中如何导出CSV文件

java - 无法使用 Struts 2.5 运行简单的登录应用程序

java - 使用JMenuBar、JMenu和JMenuItem自行设计菜单栏时呈现奇怪的效果

java - SwingWorker 不执行 doInBackGround()

Java 应用程序存在大量内存问题