@Override
    @Nullable
    public <T> ParamConverter<T> getConverter(Class<T> rawType, @Nullable Type genericType, Annotation[] annotations) {
        if (!rawType.isEnum()) {
            return null;
        }

        @SuppressWarnings("unchecked") final Class<Enum<?>> type = (Class<Enum<?>>) rawType;
        final Enum<?>[] constants = type.getEnumConstants();
        final String parameterName = getParameterNameFromAnnotations(annotations).orElse("Parameter");
        final Method fromStringMethod = AccessController.doPrivileged(ReflectionHelper.getFromStringStringMethodPA(rawType));

        return new FuzzyEnumParamConverter<>(rawType, fromStringMethod, constants, parameterName);
    }
@Test
    void testEnumViaExplicitFromStringNonStatic() {
        final ParamConverter<ExplicitFromStringNonStatic> converter = getConverter(ExplicitFromStringNonStatic.class);
        assertThatExceptionOfType(WebApplicationException.class)
            .isThrownBy(() -> converter.fromString("1"))
            .matches(e -> e.getResponse().getStatus() == 400)
            .extracting(Throwable::getMessage)
            .matches(msg -> msg.contains("A"))
            .matches(msg -> msg.contains("B"));

        assertThat(converter.fromString("A")).isSameAs(ExplicitFromStringNonStatic.A);
    }