package com.fasterxml.jackson.databind.node; import java.io.IOException; import java.util.*; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.ser.std.StdSerializer; public class POJONodeTest extends NodeTestBase { @JsonSerialize(using = CustomSer.class) public static class Data { public String aStr; } @SuppressWarnings("serial") public static class CustomSer extends StdSerializer { public CustomSer() { super(Data.class); } @Override public void serialize(Data value, JsonGenerator gen, SerializerProvider provider) throws IOException { String attrStr = (String) provider.getAttribute("myAttr"); gen.writeStartObject(); gen.writeStringField("aStr", "The value is: " + (attrStr == null ? "NULL" : attrStr)); gen.writeEndObject(); } } final ObjectMapper MAPPER = newJsonMapper(); public void testPOJONodeCustomSer() throws Exception { Data data = new Data(); data.aStr = "Hello"; Map mapTest = new HashMap<>(); mapTest.put("data", data); ObjectNode treeTest = MAPPER.createObjectNode(); treeTest.putPOJO("data", data); final String EXP = "{\"data\":{\"aStr\":\"The value is: Hello!\"}}"; String mapOut = MAPPER.writer().withAttribute("myAttr", "Hello!").writeValueAsString(mapTest); assertEquals(EXP, mapOut); String treeOut = MAPPER.writer().withAttribute("myAttr", "Hello!").writeValueAsString(treeTest); assertEquals(EXP, treeOut); } }