Jackson 2.10.1, Guice 4.2.2, Play 2.7.2
Я пытаюсь вставить объект play.Environment в пользовательский сериализатор Jackson, например:
@Singleton
public class PathSerializer extends StdSerializer<Path> {
@Inject
Environment environment;
public PathSerializer() {
this(null);
}
public PathSerializer(Class<Path> t) {
super(t);
}
@Override
public void serialize(Path value, JsonGenerator generator, SerializerProvider provider) throws IOException {
Path path = environment.rootPath().toPath().relativize(value.toAbsolutePath());
generator.writeString(path.toString());
}
}
Однако при вызове этого сериализатора выдается NullPointerException
, поскольку environment
равно null
.
Этот пользовательский сериализатор вызывается с помощью аннотации @JsonSerialize(using = PathSerializer.class)
. Насколько я понимаю, когда этот сериализатор инициализируется, им управляет Джексон, а не Guice, поэтому среда не может быть внедрена, поскольку PathSerializer
не является управляемым компонентом Guice.
Используя Spring, кажется, вы можете используйте аннотацию @Configurable
согласно this . Но, похоже, нет эквивалента Play.
Как мне это сделать?