Jackson QName serailization without namesampe/prefix



I'm trying to deserialze a Map using Jackson 2, the default ObjectMapper() gives something like:


{"{http://google.com/}myName":"myValue"}


It probably uses QName.toString() method to serialize the qname key.


I tried following to register a custom serializer for QName, but it is not getting invoked.



public static class QnameSerializer extends JsonSerializer<QName> {
@Override
public void serialize(QName value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
jgen.writeString(value.getLocalPart());
}
}

public static void main(String[] args) throws JsonProcessingException {
SimpleModule module = new SimpleModule();
module.addKeySerializer(QName.class, new QnameSerializer());
// tried module.addSerializer(QName.class, new QnameSerializer()) also
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
Map<QName, String> m =ImmutableMap.of(new QName("http://google.com/","myName","pre"), "myValue");
System.out.println(mapper.writeValueAsString(m));
}


Am I missing something?


No comments:

Post a Comment