現在のJava WebアプリケーションでJSONプラグイン(https://struts.apache.org/docs/json-plugin.html)を設定する必要があります。私がしたこと:プロパティsetData [JSON + Struts2 plugin]の互換性のないタイプ
1)pom.xml
に追加され、プラグインのすべての依存関係が追加されました。
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-json-plugin</artifactId>
<version>2.3.24.1</version>
</dependency>
2)は、自分の行動に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)作成したモデルの迎撃と結果タイプを追加しましたjson-default
<package name="my-test-package" extends="xxx, json-default"
namespace="/my-test-package">
3)でstruts.xmlでパッケージを拡張しますクラスMarriage
にはセッター/ゲッターしかありません。
5)JSON
オブジェクトを作成し、次のコード
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)でmyMainAction
という名前のActionクラスを作成し、サーバにajax
を経由して、それを通過しました。私は、Google Chrome Consoleを介して、データを送信し、JSONオブジェクトを解析し、すべてのデータがそこにあることがわかります。しかし、それは私のEclipseで例外をスローしてもクロームコンソールのん:
Exception occurred during processing request: Incompatible types for property setData (CommonsLogger.java [qtp1144623021-22]) org.apache.struts2.json.JSONException: Incompatible types for property setData
あなたはそれはほとんど私はそれに取り組んでいます二日目だが、それにはない、いくつかの正しい方向に私を指すしてもらえ働き始めているようだ。
EDIT1: Java側に送信されているデータで、Chromeのコンソールから見ることができます。
{"data":{"recordId":"123","registrationDate":"20-07-2016","hisId":"","herId":"","lastNameHe":"Asd","firstNameHe":"Asd","middleNameHe":"Asd","workPlaceHe":"","educationHe"}}
それはJSON.stringify
が-edされた後にこれがオブジェクトです。 ご覧のとおり、ルートにはdata
という変数があり、残りのデータはすべてその下にあります。私の論理によると、私のJavaクラスのデータのsetter
を見つけて、そのクラスのセッター/ゲッタを呼び出しなければなりません。 P.Sクラス名などの名前を変更したため、命名規則に関する心配はありません)私は自分のプロダクションコードに正しいことを持っています。
EDIT2:私のミスの@AleksandrMに指摘して
感謝。私はそれがstring
date
にし、それができるを設定しようと理解したよう
private Date registrationDate;
public Date getRegistrationDate() {
return registrationDate;
}
public void setRegistrationDate(Date registrationDate) {
this.registrationDate = registrationDate;
:
Unparseable date: "20-07-2016" (CommonsLogger.java [qtp212900572-17]) java.text.ParseException: Unparseable date: "20-07-2016"
この部分のjson
変数はregistrationDate
で、JAVAでの実装:今、それは非常に奇妙なエラーがスローされますそれはしない。なぜjson-pluginで変換できないのですか?オプション/設定に何かを書く必要がありますか?
jsonインターセプタの代わりにdefaultStackとjsonインターセプタを使用すると機能しますか?結婚には既定の無argsコンストラクタ(またはコンストラクタなし)がありますか? P.S:alervcase文字で始まるJavaクラスは良くない –
'defaultStack' +' json'インターセプタを使う必要があります。送信しているデータを表示する。 –
@AndreaLigios、私はそれがdefaultStackの問題かstrutsのインターセプタの位置だとは思っていません。私のMarraigeクラスにはコンストラクタがありません。そのMarraigeクラスは、DBテーブルなどを作成するために、休止状態に関連しています。そのクラスの目的は、それを記述する純粋なモデルに過ぎません。 – Daler