Прочитайте другой параметр в 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;
}
}