Ich muss JSON Plugin (https://struts.apache.org/docs/json-plugin.html) mit meiner aktuellen JAVA-Webanwendung konfigurieren. Was ich getan habe:Inkompatible Typen für die Eigenschaft setData [JSON + Struts2 plugin]
1) Hinzugefügt zu pom.xml
Datei alle Abhängigkeiten für das Plugin.
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>
2) mit dem Paket in struts.xml Erweiterte json-default
<package name="my-test-package" extends="xxx, json-default"
namespace="/my-test-package">
3) Hinzu kommt meine Aktion die Abfangjäger und Ergebnistyp von json
<action name="myMainAction"
class="org.com.action.myMainAction">
<interceptor-ref name="json">
<param name="enableSMD">true</param>
</interceptor-ref>
<result type="json">
</result>
<param name="requiredAuthorities">F_ADD</param>
</action>
4) Erstellt ein Modell Klasse Marriage
mit nur Setter/Getters drin.
5) Geschaffen, um die Action-Klasse, mit dem Namen als myMainAction
mit folgendem Code
private List <Marriage> data;
public List<Marriage> getData() {
return data;
}
public void setData(List<Marriage> data) {
System.out.println("Inside the setter ");
this.data = data;
}
@Override
public String execute() throws Exception {
System.out.println(data.get(0).getLastNameHe());
return SUCCESS;
}
6) Erstellt ein JSON
Objekt und übergab es über ajax
an den Server. Ich kann über die Google Chrome-Konsole sehen, dass die Daten gesendet werden und das JSON-Objekt analysiert wird und alle Daten darin enthalten sind. Es wird jedoch eine Ausnahme in meinem Eclipse und auch in Chrome-Konsole werfen:
Exception occurred during processing request: Incompatible types for property setData (CommonsLogger.java [qtp1144623021-22]) org.apache.struts2.json.JSONException: Incompatible types for property setData
Könnten Sie mir bitte zu einem gewissen richtige Richtung, es ist fast der zweite Tag, die ich bin auf sie arbeiten, aber es funktioniert nicht scheinen zu arbeiten.
EDIT1: Die Daten, die an Java-Seite gesendet werden, und ich kann es über die Chrome-Konsole sehen.
{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}}
Dies ist das Objekt, nachdem es JSON.stringify
-ed war. Wie Sie sehen können, hat es die Wurzel data
Variable und dann geht der ganze Rest der Daten darunter. Laut meiner Logik muss Ti die setter
der Daten in meiner Java-Klasse finden und dann die Setter/Getter dieser Klasse aufrufen. P.S Ich habe den Namen der Klassen und etc umbenannt, also keine Sorgen über Namenskonventionen) Ich habe die richtigen Dinge auf meinem Produktionscode.
EDIT2:
Dank für das zu meinen Fehler @AleksandrM Hinweis. Nun wirft es eine sehr seltsame Fehler:
Unparseable date: "20-07-2016" (CommonsLogger.java [qtp212900572-17]) java.text.ParseException: Unparseable date: "20-07-2016"
Die json
Variable für diesen Teil ist registrationDate
und seine Implementierung in JAVA:
private Date registrationDate;
public Date getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(Date registrationDate) {
this.registrationDate = registrationDate;
Wie ich verstehe es versucht, eine string
-date
zu setzen und es kann tu es nicht. Warum kann das json-plugin es nicht konvertieren? Soll ich etwas in die Optionen/Einstellungen schreiben?
Funktioniert es, wenn Sie defaultStack plus json interceptor statt nur json interceptor verwenden? Hat Heirat einen Standard-No-Args-Konstruktor (oder keine Konstruktoren)? P.S: Eine Java-Klasse, die mit einem Großbuchstaben beginnt, ist NICHT gut. –
Sie müssen 'defaultStack' +' json'-Interceptor verwenden. Zeigen Sie die Daten an, die Sie übermitteln. –
@AndreaLigios, ich denke nicht, dass es das Problem des defaultStack oder die Position der Abfangjäger in den Streben ist. Und meine Marraige-Klasse hat keine Konstrukteure. Diese Marraige-Klasse ist mit Hibernate verbunden, um db-Tabellen und dergleichen zu erstellen, und der Zweck dieser Klasse ist nur ein reines Modell, das sie beschreibt. – Daler