首页  >  文章  >  Java  >  如何使用 Jackson 的 `handledType()` 和 `serialize()` 正确实现自定义序列化器?

如何使用 Jackson 的 `handledType()` 和 `serialize()` 正确实现自定义序列化器?

Susan Sarandon
Susan Sarandon原创
2024-11-24 15:21:17253浏览

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

在 Jackson 中使用自定义序列化器

在您的代码中,您会收到 IllegalArgumentException,因为 JsonSerializer 需要 HandlingType() 方法来指定它的类型手柄。以下是如何使用handledType()和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;
  }
}

与Jackson集成:

定义自定义序列化器后,需要集成与杰克逊一起。这可以使用 SimpleModule 来实现:

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

现在,您可以使用自定义映射器来序列化 Item 对象。

序列化用户对象:

要使用自定义格式序列化 User 对象,可以定义一个单独的序列化器:

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;
  }
}

不要忘记将其与 Jackson 集成:

simpleModule.addSerializer(new UserSerializer());

以上是如何使用 Jackson 的 `handledType()` 和 `serialize()` 正确实现自定义序列化器?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn