Как связать JSON с Java-объектом в Struts2, используя struts2-json-plugin
Я хочу десериализовать (связать) JSON для Java-объекта. Как это сделать в Struts2?
Я пытаюсь сделать это с помощью struts2-json-plugin, как вы можете видеть в приведенном ниже коде, но отправленный JSON из внешнего интерфейса не привязан к моему объекту java. Не могли бы вы помочь мне, пожалуйста, как заставить этот код работать правильно?
Пожалуйста, посмотрите на мой класс Action, я не уверен, правильно ли я обрабатываю JSON в этом Action, или, может быть, я что-то пропустил?
JSON, который я пытаюсь связать:
{"data":[
{"active":true,"color":"orange","date":"2008-01-01","id":1,"name":"Chris"},
{"active":false,"color":"blue","date":"2013-03-03","id":2,"name":"Kate"},
{"active":true,"color":"black","date":"2013-05-03","id":3,"name":"Blade"},
{"active":false,"color":"yellow","date":"2013-01-01","id":4,"name":"Zack"}]
}
Отправка JSON от Ajax:
$.ajax({
url: "../json/saveJSONDataAction.action",
data: {"data": handsontable.getData()}, //returns all cells' data
dataType: 'json',
type: 'POST',
success: function (res) {
if (res.result === 'ok') {
$console.text('Data saved');
}
}
});
Получение JSON в Struts2:
Я могу добраться до метода execute () в отладке, но, к сожалению,data
поле всегда равно нулю Что я должен сделать, чтобы заполнить это поле данными из JSON? Является ли JSON в правильном формате для привязки кList<Report> data
?
@ParentPackage("json-default")
@Action(value="saveJSONDataAction")
@Result(type="json")
public class JSONSaveAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private List<Report> data;
public JSONSaveAction(){
}
public String execute() {
try {
System.out.println(data);
} catch (Exception e) {
e.printStackTrace();
}
return NONE;
}
public List<Report> getData() {
return data;
}
public void setData(List<Report> data) {
this.data = data;
}
}
Класс отчета:
public class Report {
private int id;
private String name;
private boolean active;
private String date;
private String color;
//getters and setters
}
struts.xml:
Как вы можете видеть здесь, я добавил<interceptor-ref name="json">
с участием<param name="enableSMD">true</param>
, Весь конфиг ниже:
<struts>
<constant name="struts.action.extension" value="action,pdf" />
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.configuration.xml.reload" value="true" />
<constant name="struts.custom.i18n.resources" value="i18n/ap,application" />
<constant name="struts.date.format" value="yyyy-MM-dd" />
<constant name="struts.serve.static" value="true" />
<constant name="struts.serve.static.browserCache" value="false" />
<package name="default" namespace="/ftl" extends="json-default">
<result-types>
<result-type name="rethrowException" class="com.myhome.commons.util.ExceptionRethrowResult" />
<result-type name="poi-excel" class="com.myhome.commons.util.PoiExcelResult"/>
</result-types>
<interceptors>
<interceptor name="businessException" class="com.myhome.commons.exception.BusinessExceptionInterceptor"></interceptor>
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception" />
<interceptor-ref name="alias" />
<interceptor-ref name="servletConfig" />
<interceptor-ref name="i18n" />
<interceptor-ref name="chain" />
<interceptor-ref name="scopedModelDriven" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="fileUpload">
<param name="maximumSize">10485760</param>
</interceptor-ref>
<interceptor-ref name="checkbox" />
<interceptor-ref name="staticParams" />
<interceptor-ref name="params">
<param name="excludeParams">dojo\..*</param>
</interceptor-ref>
<interceptor-ref name="json">
<param name="enableSMD">true</param>
</interceptor-ref>
<interceptor-ref name="prepare" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="businessException" />
<interceptor-ref name="validation">
<param name="includeMethods">save,search</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="includeMethods">save,search</param>
</interceptor-ref>
<interceptor-ref name="tokenSession">
<param name="includeMethods">save</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="defaultStack"/>
<global-results>
<result name="exception" type="chain">
<param name="actionName">exception</param>
<param name="namespace">/</param>
</result>
<result name="rethrowException">/applicationAccessDeniedPage.jsp</result>
<result name="applicationAccessDenied">/applicationAccessDeniedPage.jsp</result>
<result name="unavailableResource">/unavailableResource.jsp</result>
<result name="pessimisticLock">/pessimisticLock.jsp</result>
<result name="goto-crud" type="redirect">/crud/index.action</result>
<result name="goto-dict" type="redirect">/dictionaries/index.action</result>
<result name="reportXls" type="poi-excel">
<param name="contentDisposition">attachment; filename="${resultFileName}"</param>
<param name="excelWorkbook">workbook</param>
</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="com.myhome.ap.service.exception.AuthorizationFailedException" result="rethrowException"/>
<exception-mapping exception="com.myhome.ap.service.exception.ApplicationAccessDeniedException" result="applicationAccessDenied"/>
<exception-mapping exception="org.hibernate.ObjectNotFoundException" result="unavailableResource" />
<exception-mapping exception="com.myhome.ap.service.exception.model.EntityHasBeenDeletedException" result="unavailableResource" />
<exception-mapping exception="com.myhome.ap.service.exception.PessimisticLockingException" result="pessimisticLock" />
<exception-mapping exception="java.lang.Exception" result="exception"/>
</global-exception-mappings>
<action name="version" class="com.myhome.ap.web.action.VersionAction" />
</package>
</struts>
Что я делаю неправильно? Можете ли вы предложить мне несколько хороших примеров / руководств по выполнению десериализации из JSON в Java в Struts2, потому что я не могу найти ни одного правильного полного примера с десериализацией JSON в Struts2, особенно пример кода Action, который получит JSON и свяжет его с Java ,
Я вообще новичок в Struts, поэтому у меня проблемы с пониманием некоторых проблем и процессов, например, как получить и обработать JSON в действии. Есть примеры для сериализации с помощью struts2-json-plugin, но с этой темой у меня не было проблем. Пожалуйста, помогите мне...