From b0898ebd93a6aabdb58be182c3f8e9ac4f0b44b7 Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 23 Feb 2019 19:58:37 +0300 Subject: Fix hubzilla deserialization --- .../activity/helpers/ActivityIdDeserializer.java | 22 ++++++++++++++++++++++ .../activity/helpers/LinkValueDeserializer.java | 21 +++++++++++++++++++++ .../juick/server/api/activity/model/Activity.java | 4 ++++ .../juick/server/api/activity/model/Context.java | 3 +++ 4 files changed, 50 insertions(+) create mode 100644 src/main/java/com/juick/server/api/activity/helpers/ActivityIdDeserializer.java create mode 100644 src/main/java/com/juick/server/api/activity/helpers/LinkValueDeserializer.java diff --git a/src/main/java/com/juick/server/api/activity/helpers/ActivityIdDeserializer.java b/src/main/java/com/juick/server/api/activity/helpers/ActivityIdDeserializer.java new file mode 100644 index 00000000..de43dd5c --- /dev/null +++ b/src/main/java/com/juick/server/api/activity/helpers/ActivityIdDeserializer.java @@ -0,0 +1,22 @@ +package com.juick.server.api.activity.helpers; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; + +public class ActivityIdDeserializer extends JsonDeserializer { + @Override + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonToken jsonToken = p.getCurrentToken(); + if (jsonToken == JsonToken.VALUE_EMBEDDED_OBJECT) { + JsonNode node = p.getCodec().readTree(p); + return node.get("id").textValue(); + } + return p.getValueAsString(); + } +} diff --git a/src/main/java/com/juick/server/api/activity/helpers/LinkValueDeserializer.java b/src/main/java/com/juick/server/api/activity/helpers/LinkValueDeserializer.java new file mode 100644 index 00000000..a635ea95 --- /dev/null +++ b/src/main/java/com/juick/server/api/activity/helpers/LinkValueDeserializer.java @@ -0,0 +1,21 @@ +package com.juick.server.api.activity.helpers; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; + +public class LinkValueDeserializer extends JsonDeserializer { + @Override + public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + JsonToken jsonToken = p.getCurrentToken(); + if (jsonToken == JsonToken.VALUE_STRING) { + return p.getValueAsString(); + } + JsonNode node = p.getCodec().readTree(p); + return node.get("href").textValue(); + } +} diff --git a/src/main/java/com/juick/server/api/activity/model/Activity.java b/src/main/java/com/juick/server/api/activity/model/Activity.java index ec126b88..2af14479 100644 --- a/src/main/java/com/juick/server/api/activity/model/Activity.java +++ b/src/main/java/com/juick/server/api/activity/model/Activity.java @@ -1,7 +1,11 @@ package com.juick.server.api.activity.model; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.juick.server.api.activity.helpers.ActivityIdDeserializer; + public abstract class Activity extends Context { + @JsonDeserialize(using = ActivityIdDeserializer.class) private String actor; private Object object; diff --git a/src/main/java/com/juick/server/api/activity/model/Context.java b/src/main/java/com/juick/server/api/activity/model/Context.java index 515ee3da..2ba4606e 100644 --- a/src/main/java/com/juick/server/api/activity/model/Context.java +++ b/src/main/java/com/juick/server/api/activity/model/Context.java @@ -4,6 +4,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.juick.server.api.activity.helpers.LinkValueDeserializer; import com.juick.server.api.activity.model.activities.*; import com.juick.server.api.activity.model.objects.*; @@ -46,6 +48,7 @@ public abstract class Context { private Instant published; + @JsonDeserialize(using = LinkValueDeserializer.class) private String url; private List to; -- cgit v1.2.3