From e3984afa037de08eea8c02661270194f730a85a7 Mon Sep 17 00:00:00 2001 From: Jason Dillon Date: Thu, 12 Nov 2020 11:38:08 -0800 Subject: [PATCH] Add PackageUrlKeyDeserializer --- .../packageurl/jackson/PackageUrlModule.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/sonatype/goodies/packageurl/jackson/PackageUrlModule.java b/src/main/java/org/sonatype/goodies/packageurl/jackson/PackageUrlModule.java index a1f0bed..2bafc30 100644 --- a/src/main/java/org/sonatype/goodies/packageurl/jackson/PackageUrlModule.java +++ b/src/main/java/org/sonatype/goodies/packageurl/jackson/PackageUrlModule.java @@ -25,6 +25,7 @@ import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.core.type.WritableTypeId; import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.KeyDeserializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.jsontype.TypeSerializer; @@ -54,9 +55,9 @@ public PackageUrlModule withFlavor(@Nullable final RenderFlavor flavor) { @Override public void setupModule(final SetupContext context) { - addSerializer(PackageUrl.class, new PackageUrlSerializer(flavor)); addDeserializer(PackageUrl.class, new PackageUrlDeserializer()); - + addKeyDeserializer(PackageUrl.class, new PackageUrlKeyDeserializer()); + addSerializer(PackageUrl.class, new PackageUrlSerializer(flavor)); super.setupModule(context); } @@ -81,6 +82,28 @@ public PackageUrl deserialize(final JsonParser parser, final DeserializationCont } } + /** + * {@link PackageUrl} key-deserializer. + * + * @since ??? + */ + public static class PackageUrlKeyDeserializer + extends KeyDeserializer + implements java.io.Serializable + { + private static final long serialVersionUID = 1L; + + @Override + public Object deserializeKey(final String value, final DeserializationContext context) + throws IOException + { + if (value != null) { + return PackageUrl.parse(value); + } + return null; + } + } + /** * {@link PackageUrl} serializer. */