私は、JSONにシリアライズすることとMySQLデータベースに保存するサーバに渡って送信することであるDAOクラスにBooleanPropertyを追加しました。私はJavaFXのデスクトップアプリケーションに「のisActive」フィールドのデータバインディングを使用したいので、私はBooleanPropertyを使用していた理由です。
クラスは、直列化されます。
package com.example.myapplication
import lombok.Data;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
@Data
public class MyDAO {
private int id;
private String firstName;
private String lastname;
private final BooleanProperty isActive = new SimpleBooleanProperty();
}
私はGsonを使用してJSONにシリアライズしています:
StringEntity entity = new StringEntity(new Gson().toJson(myDTO), "UTF-8");
これは、JSONにシリアライズされますと、それは次のようになります。
{
"id":0,
"first_name":"Joe",
"last_name":"Bloggs",
"is_active":{
"name":"",
"value":false,
"valid":true
}
}
逆シリアル化するとき、サーバーがデータベースに保存されるものに対応するようにブール値を想定し、これは、(ジャクソンを使用して)サーバ上の問題を引き起こしています。ちょうど真/偽の値がBooleanPropertyから直列化復元取得する方法はありますか?
これは私がサーバーで見てみたいものです。
{
"id":0,
"first_name":"Joe",
"last_name":"Bloggs",
"is_active": false,
}
あなたのクライアントアプリケーションが使用するGson
シリアライズへPOJO
のJSON
アプリの使用とサーバーJackson
deserialiseするJSON
バックへPOJO
。どちらの場合も、デフォルトのシリアライズすることにより、これらの2つのライブラリは、通常のようなクラスを提供POJO
-s。あなたにはPOJO
、あなたが使用しJavaFX Properties
、余分な機能を持つ値のラッパーです。あなたはシリアライズするときPOJO
にJSON
、あなたがの内部実装を非表示にする必要があり、時にはPOJO
、あなたがカスタムシリアライザを実装するか、使うべき理由ですFX Gsonのライブラリを。
1.カスタムシリアライザ
書き込みカスタムシリアライザにあなたが実装する必要があるcom.google.gson.JsonSerializer
インターフェイスを。あなたが例を見ることができますホットそれは次のようになります。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import lombok.Data;
import java.lang.reflect.Type;
public class GsonApp {
public static void main(String[] args) {
MyDAO myDAO = new MyDAO();
myDAO.setId(1);
myDAO.setFirstName("Vika");
myDAO.setLastname("Zet");
myDAO.getIsActive().set(true);
Gson gson = new GsonBuilder()
.registerTypeAdapter(BooleanProperty.class, new BooleanPropertySerializer())
.setPrettyPrinting().create();
System.out.println(gson.toJson(myDAO));
}
}
class BooleanPropertySerializer implements JsonSerializer<BooleanProperty> {
@Override
public JsonElement serialize(BooleanProperty src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src.getValue());
}
}
@Data
class MyDAO {
private int id;
private String firstName;
private String lastname;
private final BooleanProperty isActive = new SimpleBooleanProperty();
}
上記のコードを印刷:
{
"id": 1,
"firstName": "Vika",
"lastname": "Zet",
"isActive": true
}
2. FX Gson
ケースでは、より多くの種類を使用javafx.beans.property.*
用いることであろうパッケージの良いアイデアをFX Gson
最も使用されるタイプのためのカスタムserialisersを実装するライブラリを。あなたはただ1つの余分追加する必要があり、依存関係をあなたにMaven
POM
ファイル:
<dependency>
<groupId>org.hildan.fxgson</groupId>
<artifactId>fx-gson</artifactId>
<version>3.1.2</version>
</dependency>
使用例:
import com.google.gson.Gson;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import lombok.Data;
import org.hildan.fxgson.FxGson;
public class GsonApp {
public static void main(String[] args) {
MyDAO myDAO = new MyDAO();
myDAO.setId(1);
myDAO.setFirstName("Vika");
myDAO.setLastname("Zet");
myDAO.getIsActive().set(true);
Gson gson = FxGson.coreBuilder().setPrettyPrinting().create();
System.out.println(gson.toJson(myDAO));
}
}
上記のコードを印刷:
{
"id": 1,
"firstName": "Vika",
"lastname": "Zet",
"isActive": true
}