如何在Struts中使用其键值获取json对象?

时间:2014-11-26 04:47:44

标签: java jquery json struts2 struts

我正在开发struts中的web服务。现在我想要使用其键值的json对象。然后我必须发布类似数组的回复。我不知道如何在Struts中这样做。我知道如何在Servlets中做到这一点。所以,我正在使用我尝试过的以下代码,但我认为它在Struts中有所不同。

JSONObject json = (JSONObject)new JSONParser().parse(jb.toString());
                      String key_value= json.get("key").toString(); 

那么,如何在Struts中完成它。还请告诉我如何解析json数组。

1 个答案:

答案 0 :(得分:1)

使用JSON不需要将JSON发送到Struts。即使它可以配置为接受JSON内容类型,它也不会帮助您。你可以使用普通的Struts请求和传入的数据。如果它是一个Ajax调用,那么你可以使用像

这样的东西
$.ajax({
   url: "<s:url namespace="/aaa" action="bbb"/>",     
   data : {key: value},
   dataType:"json",
   success: function(json){
     $.each(json, function( index, value ) {
       alert( index + ": " + value );
     });
   }
}); 

value应该是通过params拦截器和OGNL填充的动作属性。成功函数中返回的json应该是JSON对象,可以直接使用而无需解析。

您需要为属性key提供操作配置和设置器。

<强> struts.xml

<package name="aaa" namespace="/aaa"  extends="json-default">
  <action name="bbb" class="com.bbb.Bbb" method="ccc">
   <result type="json">
     <param name="root">
   </result>
  </action> 
</package>

此配置使用了包"json"中的"json-default"结果类型,如果您使用struts2-json-plugin,则可以使用该结果类型。

行动类:

public class Bbb extends ActionSupport {

  private String key;
  //setter

  private List<String> value = new ArrayList<>();
  //getter

  public String ccc(){
    value.add("Something");
    return SUCCESS;
  }
} 

当您返回SUCCESS结果时,Struts会通过在序列化期间调用其getter方法,将value参数定义的root属性序列化为JSON结果。

如果您需要将JSON发送到Struts操作,您应该阅读this回答。