Java 使用struts2 json插件

Java 使用struts2 json插件,java,json,struts2,struts2-json-plugin,Java,Json,Struts2,Struts2 Json Plugin,我有一个抽象类,它看起来如下所示,带有针对私有属性的适当getter和setter(为了保持post排序而省略): 然后我有一个非常简单的类,如下所示: public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction { @Override public String perform() { if (getCityDistance() == null) { addActionErro

我有一个抽象类,它看起来如下所示,带有针对私有属性的适当getter和setter(为了保持post排序而省略):

然后我有一个非常简单的类,如下所示:

public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction {

  @Override
  public String perform() {
    if (getCityDistance() == null) {
      addActionError("No city distance found for that pair");
      return ERROR;
    }
    return SUCCESS;
  }
}
  public CityDistance getAjaxCityDistance() {
    return getCityDistance();
  }
<action name="searchCityDistance" class="searchCityDistanceActionAjaxAction">
  <result type="json">
    <param name="ignoreHierarchy">false</param>
    <param name="excludeProperties">
      cityDistanceRepository
    </param>
    <param name="includeProperties">
      cityDistance.*
    </param>
  </result>
  <result name="error" type="json">
    <param name="ignoreHierarchy">false</param>
    <param name="includeProperties">
      actionErrors.*
    </param>
  </result>
</action>
我的想法是我可以发送字符串cityA和字符串cityB。进行查找并通过AJAX简单地返回
cityDistance
对象

当我设置我的
struts.xml
操作时,如下所示:

<action name="searchCityDistance" class="searchCityDistanceAjaxAction">
  <result type="json">
    <param name="includeProperties">
      cityDistance.*
    </param>
  </result>
  <result name="error" type="json">
    <param name="ignoreHierarchy">false</param>
    <param name="includeProperties">
      actionErrors.*
    </param>
  </result>
</action>
并将struts文件更改为:

  <result type="json">
    <param name="includeProperties">
      ajaxCityDistance.*
    </param>
  </result>

AjaxCity距离*
它给了我我第一次尝试的期望

(commonLogger.java:68)-添加include属性表达式: ajaxCityDistance.*(commonLogger.java:68)- [JSON]{“ajaxCityDistance”:{“cityPair”:{“cityA”:{“cityName”:“American” 瀑布,id:68},城市B:{“城市名称”:“Ririe”,id:119},距离:85}

最好从my
SearchCityDistanceAjaxAction
中删除getter,因为父级中已经提供了getter。这里有我遗漏的东西吗?或者这是它应该发挥作用的方式吗


提前感谢。

我可以将struts.xml文件更改为以下内容:

public class SearchCityDistanceAjaxAction extends CityDistanceAwareAction {

  @Override
  public String perform() {
    if (getCityDistance() == null) {
      addActionError("No city distance found for that pair");
      return ERROR;
    }
    return SUCCESS;
  }
}
  public CityDistance getAjaxCityDistance() {
    return getCityDistance();
  }
<action name="searchCityDistance" class="searchCityDistanceActionAjaxAction">
  <result type="json">
    <param name="ignoreHierarchy">false</param>
    <param name="excludeProperties">
      cityDistanceRepository
    </param>
    <param name="includeProperties">
      cityDistance.*
    </param>
  </result>
  <result name="error" type="json">
    <param name="ignoreHierarchy">false</param>
    <param name="includeProperties">
      actionErrors.*
    </param>
  </result>
</action>

假的
城市癌症住院医师
城市距离*
假的
操作错误*

但是,使用excludeProperties来忽略我的城市旅游景点,还是有点可疑。如果必须这样做,我想我会这么做,但希望有更好的解决方案。

CityDistanceAwareAreaction
类中是否有公共
getCityDistance()
方法?是的,
CityDistanceAwareAreaction
中有
getCityDistance()
方法-它明确指出IncludeProperty采用正则表达式,因此cityDistance.*将所有字段与其名称中的cityDistance匹配。您只需跳过(.*)项,它就可以按预期工作,而不需要排除属性。@coding\u idiot您知道这就是我的想法,但是。。。当我只做cityDistance时,它会发送一个空对象。@coding\u傻瓜好吧,所以我今天早上上班的时候去了,试了一下你的建议。我删除了
*
excludeProperties
,得到了以下返回的
(commonlogger.java:68)-添加了include属性表达式:cityDistance
(commonlogger.java:68)-[JSON]{“cityDistance”:{}
,正如您所看到的,它是空的:-(是“cityDistance”可序列化?@coding\u是的,确实是。必须仔细检查,但它是可序列化的。它的组件也是。