Jak powiązać JSON z obiektem Java w Struts2 za pomocą wtyczki struts2-json
Chcę deserializować (powiązać) JSON z obiektem java. Jak to zrobić w Struts2?
Próbuję to zrobić za pomocą wtyczki struts2-json-jak widać w poniższym kodzie, ale wysłanie JSON z frontendu nie wiąże się z moim obiektem java. Czy możesz mi pomóc, jak sprawić, by ten kod działał poprawnie?
Proszę spojrzeć na moją klasę akcji, nie jestem pewien, czy poprawnie obsługuję JSON w tej akcji, czy może coś przeoczyłem?
JSON, który próbuję powiązać:
{"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"}]
}
Wysyłanie JSON przez 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');
}
}
});
Odbieranie JSON w Struts2:
Mogę osiągnąć metodę execute () w debugowaniu, ale niestetydata
pole jest zawsze puste. Co powinienem zrobić, aby wypełnić to pole danymi z JSON? Czy JSON ma poprawny format do powiązaniaList<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;
}
}
Klasa raportu:
public class Report {
private int id;
private String name;
private boolean active;
private String date;
private String color;
//getters and setters
}
struts.xml:
Jak widać tutaj dodałem<interceptor-ref name="json">
z<param name="enableSMD">true</param>
. Cała konfiguracja poniżej:
<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>
Co ja robię źle? Czy możesz zaproponować mi kilka dobrych przykładów / samouczka, jak zrobić deserializację z JSON do Java w Struts2, ponieważ nie mogę znaleźć nawet jednego poprawnego pełnego przykładu z deserializacją JSON w Struts2, specjalnie przykład kodu akcji, który otrzyma JSON i powiąza go z Javą .
W ogóle jestem nowy w Struts, dlatego mam problemy ze zrozumieniem niektórych problemów i przepływów, na przykład, jak odbierać i obsługiwać JSON w akcji. Istnieją przykłady serializacji za pomocą wtyczki struts2-json, ale w tym temacie nie miałem żadnych problemów. Proszę pomóż mi...