FasterXML / FasterXML/jackson-modules-base

Guice7 Module usage with XmlMapper and JsonMapper concurrently

Offen
#265 4 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
2.19 pr-welcome
Vorherrschende Sprache
Java
Sterne
180
Forks
80
Ø Merge
3 Std. 26 Min.
Gemergte PRs (30 T.)
1

Beschreibung

I've an application where I need to use the XmlMapper and JsonMapper in the same global guice injector. Therefore I need a way to distinguish between those two mappers. I know of two options here: (1) I could make use of `@Named("xml")` and ObjectMapper superclass to distinguish between them. Yet, (2) I like to use the type safe variant by defining the relevant subclasses (JsonMapper, XmlMapper) with Guice. I decided to go with the second route as this allows me to make use of type checking and has a generally easier Guice interfacing.

Unfortunately, in combination with Guice7 Module this requires to do the following messy initialization:

```Java
final var jsonKey = (Key) Key.get(JsonMapper.class).ofType((Type) JsonMapper.class);
final var jsonMapper = JsonMapper.builder()
.addModule(new JavaTimeModule())
.build();
final var xmlKey = (Key) Key.get(XmlMapper.class).ofType((Type) XmlMapper.class);
final var xmlMapper = XmlMapper.builder()
.addModule(new JavaTimeModule())
.build();
Guice.createInjector(
new ObjectMapperModule(jsonKey).withObjectMapper(jsonMapper),
new ObjectMapperModule(xmlKey)..withObjectMapper(xmlMapper));
```

Since the `new ObjectMapperModule(jsonKey)` constructor only allows keys of type `Key` without subclass types it forces me to do ugly type and casting Magic. Therefore I propose to add a constructor to `ObjectMapperModule` with a definition like `Key`:

```Java
public ObjectMapperModule(Key objectMapperKey)
{
...
}
```

Which would lead to the following API:

```Java
var injector = Guice.createInjector(new ObjectMapperModule(Key.get(XmlMapper.class)).withObjectMapper(xmlMapper));
XmlMapper mapper = injector.getInstance(XmlMapper.class);
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.