From 8728b2f8539c24bc23e7ae1b60ce5d7a9f40e3e6 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Wed, 30 Nov 2022 20:20:44 +0100 Subject: [PATCH] Jackson serializer and deserializer for Java MimeType class --- .../java/org/librecms/assets/BinaryAsset.java | 6 +++ .../imexport/MimeTypeJsonDeserializer.java | 39 +++++++++++++++++++ .../imexport/MimeTypeJsonSerializer.java | 28 +++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonDeserializer.java create mode 100644 ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonSerializer.java diff --git a/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java b/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java index ecc61b49d..aca14e1a4 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java +++ b/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java @@ -18,6 +18,8 @@ */ package org.librecms.assets; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.librecms.contentsection.Asset; import java.io.Serializable; @@ -38,6 +40,8 @@ import org.hibernate.envers.NotAudited; import org.libreccm.core.UnexpectedErrorException; import org.libreccm.jpa.utils.MimeTypeConverter; import org.libreccm.l10n.LocalizedString; +import org.libreccm.ui.admin.imexport.MimeTypeJsonDeserializer; +import org.libreccm.ui.admin.imexport.MimeTypeJsonSerializer; import org.librecms.contentsection.privileges.AssetPrivileges; import java.io.InputStream; @@ -149,6 +153,8 @@ public class BinaryAsset extends Asset implements Serializable { @Column(name = "MIME_TYPE", length = 512, nullable = false) @Convert(converter = MimeTypeConverter.class) + @JsonSerialize(using = MimeTypeJsonSerializer.class) + @JsonDeserialize(using = MimeTypeJsonDeserializer.class) private MimeType mimeType; @Column(name = "ASSET_DATA") diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonDeserializer.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonDeserializer.java new file mode 100644 index 000000000..1a001759d --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonDeserializer.java @@ -0,0 +1,39 @@ +package org.libreccm.ui.admin.imexport; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; + +import javax.activation.MimeType; +import javax.activation.MimeTypeParseException; + +/** + * + * @author Jens Pelzetter + */ +public class MimeTypeJsonDeserializer extends JsonDeserializer { + + @Override + public MimeType deserialize( + final JsonParser parser, + final DeserializationContext ctxt + ) throws IOException, JsonProcessingException { + final JsonNode node = parser.getCodec().readTree(parser); + final String value = node.get("mimeType").asText(); + try { + return new MimeType(value); + } catch (MimeTypeParseException ex) { + throw new IllegalArgumentException( + String.format( + "Value \"%s\" not parseable as MimeType.", + value + ) + ); + } + } + +} diff --git a/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonSerializer.java b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonSerializer.java new file mode 100644 index 000000000..9e99915d5 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/ui/admin/imexport/MimeTypeJsonSerializer.java @@ -0,0 +1,28 @@ +package org.libreccm.ui.admin.imexport; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +import javax.activation.MimeType; + +/** + * + * @author Jens Pelzetter + */ +public class MimeTypeJsonSerializer extends JsonSerializer { + + @Override + public void serialize( + final MimeType value, + final JsonGenerator generator, + final SerializerProvider serializers + ) throws IOException { + generator.writeStartObject(); + generator.writeStringField("mimeType", value.toString()); + generator.writeEndObject(); + } + +}