jsonapi.org標準我想分析遵循jsonapi.org標準與境界的Android
我使用jsonapi-converter的轉換器和要實現的境界,以及JSON。我無法得到任何想法或線索如何實施兩者。如果有人已經做到了,你的幫助將不勝感激。提前致謝。
jsonapi.org標準我想分析遵循jsonapi.org標準與境界的Android
我使用jsonapi-converter的轉換器和要實現的境界,以及JSON。我無法得到任何想法或線索如何實施兩者。如果有人已經做到了,你的幫助將不勝感激。提前致謝。
{
"data":[
{
"type":"product",
"id":"1",
"attributes":{
"title":"Wai Wai Noodles",
"description":"",
"liked":true,
"is-active":true
},
"links":{
"self":"https://wongel.info/product/1"
},
"relationships":{
"productinfo":{
"links":{
"self":"https://wongel.info/product/1/relationships/productinfo",
"related":"https://wongel.info/product/1/productinfo"
},
"data":{
"type":"productinfo",
"id":"1"
}
}
}
}
],
"included":[
{
"type":"productinfo",
"id":"1",
"attributes":{
"product-category":null,
"description":null
},
"links":{
"self":"https://wongel.info/productinfo/1"
}
}
]
}
這是我的json我必須解析下面的jsonApi.Org標準。我使用 jasminb/jsonapi-converter 進行領域解析。因此,這裏有我的產品類和Prodct信息類
@Type("product")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Product extends RealmObject {
@Id
@PrimaryKey
@JsonProperty("id")
private String id;
@JsonProperty("title")
private String title;
@JsonProperty("description")
private String description;
@JsonProperty("is_active")
private boolean isActive;
@JsonProperty("liked")
private boolean liked;
@Relationship("productinfo")
private ProductInfo productInfo;
@Ignore
@Links
@JsonProperty("links")
private com.github.jasminb.jsonapi.Links links;
@JsonIgnore
private RealmList<JsonMap> linkList;
@Ignore
@RelationshipLinks("productinfo")
private com.github.jasminb.jsonapi.Links productLinks;
@JsonIgnore
private RealmList<JsonMap> productLinkList;
//setter getter
public void migrateToList() {
linkList = GlobalUtils.getMap(links);
productLinkList = GlobalUtils.getMap(productLinks);
}
public void migrateToLink() {
links = GlobalUtils.getMap(linkList);
productLinks = GlobalUtils.getMap(productLinkList);
}
}
ProductInfo
@Type("productinfo")
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProductInfo extends RealmObject {
@Id
@PrimaryKey
@JsonProperty("id")
private String id;
@JsonProperty("product-category")
private String category;
@JsonProperty("description")
private String description;
//setter getter
}
JsonMap保存鏈接DATAS
public class JsonMap extends RealmObject {
private String key;
private String value;
public JsonMap() {
}
public JsonMap(String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
所以一旦閱讀jasminb/jsonapi轉換器,你會明白的文檔它是如何工作的。棘手的部分是領域需要所有的對象擴展realmObject或realmModule我試圖過分鏈接和鏈接在jasminb/jsonapi轉換器沒有工作,所以我做了什麼在產品模型中看到。有2班
public void migrateToList() {
linkList = GlobalUtils.getMap(links);
productLinkList = GlobalUtils.getMap(productLinks);
}
public void migrateToLink() {
links = GlobalUtils.getMap(linkList);
productLinks = GlobalUtils.getMap(productLinkList);
}
One幫助遷移從鏈接realmList其由境界的支持,另一個來自列表鏈接這是需要調用的API等
ResourceConverter converter = new ResourceConverter(ProductR.class, ProductInfo.class);
converter.enableSerializationOption(SerializationFeature.INCLUDE_RELATIONSHIP_ATTRIBUTES);
JSONAPIConverterFactory converterFactory = new JSONAPIConverterFactory(converter);
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addConverterFactory(converterFactory)
.build();
ApiService apiService = retrofit.create(ApiService.class);
Call<JSONAPIDocument<List<Product>>> call = apiService.getProducts();
call.enqueue(new Callback<JSONAPIDocument<List<Product>>>() {
@Override
public void onResponse(Call<JSONAPIDocument<List<Product>>> call, Response<JSONAPIDocument<List<Product>>> response) {
if (response.isSuccessful()) {
// success
} else {
//error body
}
}
@Override
public void onFailure(Call<JSONAPIDocument<List<Product>>> call, Throwable t) {
//failed
}
});
上面代碼中調用服務器數據API。
幾乎每個查看過此代碼的人(包括我,@Dalinaum和@EpicPandaForce)都立即建議您將JSON和Realm表示法分開:將JSON讀入JSON對象,然後在JSON上添加toRealm
方法對象或Realm對象上的方法(或構造函數)。
試圖在同一個對象中表示兩個外部接口將這兩個表示聯繫在一起,可能不是很好的分離關注點。
我們都同意你在做什麼是聰明的,並會工作。我們都建議你以不同的方式做!
這樣做肯定會區分領域和json之間的聯繫,但這樣做會導致創建許多模型。那麼更好地讓更多的模特班將它們綁在一起?我會嘗試一次。感謝您的評論。 –
使用jsonapi轉換器的類是否可以擴展RealmObject並使用Realm的註釋?如果可能的話,他們可以混合在一起。否則,我認爲你應該將jsonapi轉換器對象轉換爲JsonObject,JSON字符串或Realm對象。 – Dalinaum
@Dalinaum我正在爲此工作。使用jsonapi轉換器我可以解析和擴展RealmObject,但是關於我正在測試的領域註釋。 –
最好的做法是將API響應和數據庫對象分開,在這種情況下,如何做到這一點並不是問題。 – EpicPandaForce