Прочитайте другой параметр в ParamConverter Джерси

Я сделалParamConverter который обеспечиваетInstant (Дата), когда задана строка, отформатированная как собственный стандарт Instant-ISO-8601 или как целое число миллисекунд с начала эпохи. Это работает нормально, но я также должен иметь возможность поддерживать другие форматы даты (клиенты суетливы).

Чтобы избежать классикиdd/mm/yyyy противmm/dd/yyyy двусмысленность, я хотел бы, чтобы клиент указал свой предпочтительный формат как часть запроса *. например:

GET http://api.example.com/filter?since=01/02/2000&dateformat=dd/mm/yyyy

передается метод, который выглядит следующим образом:

@GET
String getFilteredList( final @QueryParam( "since" ) Instant since ) {
    ...
}

(части времени и часового пояса опущены для ясности)

Так что я хотел бы мойParamConverter<Instant> чтобы иметь возможность читатьdateformat параметр.

Я был в состоянии использовать комбинацию фильтра, который устанавливаетContainerRequestContext собственность иAbstractValueFactoryProvider чтобы сделать что-то подобное, но для этого параметра необходимо применить пользовательскую аннотацию и не позволить ему работать с QueryParam / FormParam / и т. д., что делает его гораздо менее полезным.

Есть ли способ получить другие параметры или сам объект запроса из ParamConverter?

[*] В реальном мире это было бы из набора предварительно одобренных форматов, но сейчас просто предположим, что они предоставляют вклад вDateTimeFormatter

Для ясности вот код, который у меня есть:

public class InstantParameterProvider implements ParamConverterProvider {
    private static final ParamConverter<Instant> INSTANT_CONVERTER =
            new ParamConverter<Instant>( ) {
                @Override public final T fromString( final String value ) {
                    // This is where I would like to get the other parameter's value
                    // Is it possible?
                }

                @Override public final String toString( final T value ) {
                    return value.toString( );
                }
            };

    @SuppressWarnings( "unchecked" )
    @Override public <T> ParamConverter<T> getConverter(
            final Class<T> rawType,
            final Type genericType,
            final Annotation[] annotations
    ) {
        if( rawType == Instant.class ) {
            return (ParamConverter<T>) INSTANT_CONVERTER;
        }
        return null;
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос