FasterXML / FasterXML/jackson-modules-base

Guice7 Module usage with XmlMapper and JsonMapper concurrently

Aperta
#265 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub
2.19 pr-welcome
Lingua principale
Java
Stelle
180
Fork
80
Merge medio
3h 26m
PR unite (30g)
1

Descrizione

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);
```

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.