Home  >  Article  >  Java  >  How to Properly Implement Custom Serializers with Jackson\'s `handledType()` and `serialize()`?

How to Properly Implement Custom Serializers with Jackson\'s `handledType()` and `serialize()`?

Susan Sarandon
Susan SarandonOriginal
2024-11-24 15:21:17252browse

How to Properly Implement Custom Serializers with Jackson's `handledType()` and `serialize()`?

Using Custom Serializers with Jackson

In your code, you receive an IllegalArgumentException because JsonSerializer requires a handledType() method to specify the type it handles. Here's how to correctly implement it using handledType() and serialize():

public class ItemSerializer extends JsonSerializer<Item> {

  @Override
  public void serialize(Item value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeNumberField("itemNr", value.getItemNr());
    jgen.writeNumberField("createdBy", value.getCreatedBy().getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<Item> handledType() {
    return Item.class;
  }
}

Integrating with Jackson:

After defining the custom serializer, you need to integrate it with Jackson. This can be achieved using a SimpleModule:

ObjectMapper mapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule("SimpleModule",
                                              new Version(1,0,0,null));
simpleModule.addSerializer(new ItemSerializer());
mapper.registerModule(simpleModule);

Now, you can use the customized mapper to serialize Item objects.

Serializing User Objects:

To serialize User objects with a custom format, you can define a separate serializer:

public class UserSerializer extends JsonSerializer<User> {

  @Override
  public void serialize(User value, JsonGenerator jgen,
                        SerializerProvider provider) throws IOException,
                                                       JsonProcessingException {
    jgen.writeStartObject();
    jgen.writeNumberField("id", value.getId());
    jgen.writeEndObject();
  }

  @Override
  public Class<User> handledType() {
    return User.class;
  }
}

Don't forget to integrate it with Jackson:

simpleModule.addSerializer(new UserSerializer());

The above is the detailed content of How to Properly Implement Custom Serializers with Jackson\'s `handledType()` and `serialize()`?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn