Home > Java > javaTutorial > body text

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

Susan Sarandon
Release: 2024-11-24 15:21:17
Original
251 people have browsed it

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;
  }
}
Copy after login

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);
Copy after login

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;
  }
}
Copy after login

Don't forget to integrate it with Jackson:

simpleModule.addSerializer(new UserSerializer());
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template