我有一个Struts 2应用程序,我在其中使用struts 2 json插件进行json处理。
现在我想使用dojo数据网格来填充动作中的数据。我可以打电话给这个动作。所有内置数据类型都在操作中。但是,当我在我的类中使用自定义对象时,我在动作类中得到错误。
我想使用ItemFileReadStore作为网格的存储,它需要以下格式的数据:
items: [{obj1},{obj2},{obj3},{obj4}]
现在我有一个名为Device的类。我想将一个Device对象列表发送回客户端。但是我如何提供上述格式的数据并在客户端使用它。?
编辑:
我收到以下错误:
E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet Error]-[com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:624)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1071)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:917)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:924)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:852)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
出现此错误的原因是什么。我的行动课是:
jsonWrapper.setIdentifier("firstName");
jsonWrapper.getListItems().add(User.getUser("t2590pk"));
jsonWrapper.getListItems().add(User.getUser("t8923sm"));
jsonWrapper.setItems(jsonWrapper.gson.toJson(jsonWrapper.getListItems()));
System.out.println(jsonWrapper.getItems());
Struts配置:
<action name="jsonTest" class="com.dcx.ispeed.actions.JSONTest">
<result type="json">
<param name="excludeProperties">
gson
</param>
</result>
</action>
jsonWrapper类:
/**
*
*/
package com.dcx.ispeed.business;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.Gson;
import com.ibm.ws.http.HttpRequest;
/**
* @author t2590pk
*
*/
public class JSONWrapper {
public Gson gson = new Gson();
private String identifier;
private String label;
private String items;
private List listItems = new ArrayList();
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getItems() {
return items;
}
public void setItems(String items) {
this.items = items;
}
public List getListItems() {
return listItems;
}
public void setListItems(List listItems) {
this.listItems = listItems;
}
/**
*
*/
public JSONWrapper() {
System.out.println("Calling JSON wrapper constructor.");
}
}
谢谢.. :)
答案 0 :(得分:1)
您可以使用google Gson软件包,如下所示
import com.google.gson.Gson;
String json = "{\"name\":\"ABC\",\"address\":\"some address\"}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
public class Person{
public String name;
public String address;
}
注意:您必须为Person类实现默认构造函数和所有getter和setter。 您的案例中的数组将是Set
答案 1 :(得分:0)
你的gson库可能会发生这种情况所以请更新你的gson库并在你使用json时发出jsonException,这将显示代码异常的来源。