Я предоставляю реализацию ParamConverterProvider
в приложении JAX-RS.Эта реализация обеспечивает определение абстрактного метода в интерфейсе с подписью как:
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation annotations[]);
Я играю с онлайн-учебником и изменил реализацию следующим образом.
package org.koushik.javabrains.rest;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Calendar;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
import org.koushik.javabrains.rest.MyDate;
@Provider
public class MyDateConverterProvider implements ParamConverterProvider {
@Override
public <MyDate> ParamConverter<MyDate> getConverter(final Class<MyDate> rawType, Type genericType, Annotation[] annotations) {
return new ParamConverter<MyDate>() {
@Override
public MyDate fromString(String value) {
Calendar requestedDate = Calendar.getInstance();
if ("tomorrow".equalsIgnoreCase(value)) {
requestedDate.add(Calendar.DATE, 1);
}
else if ("yesterday".equalsIgnoreCase(value)) {
requestedDate.add(Calendar.DATE, -1);
}
org.koushik.javabrains.rest.MyDate myDate = new org.koushik.javabrains.rest.MyDate();
myDate.setDate(requestedDate.get(Calendar.DATE));
myDate.setMonth(requestedDate.get(Calendar.MONTH));
myDate.setYear(requestedDate.get(Calendar.YEAR));
return rawType.cast(myDate);
}
@Override
public String toString(MyDate myBean) {
if (myBean == null) {
return null;
}
return myBean.toString();
}
};
}
}
IУ меня есть несколько вопросов:
- Зачем мне нужно указывать полное имя пакета при установке типа T, который будет возвращен из
getConverter
.Он имеет то же имя пакета, что и текущий класс, но мне нужно написать полное имя, иначе я получаю ошибку компиляции, не могу создать экземпляр.org.koushik.javabrains.rest.MyDate myDate = new org.koushik.javabrains.rest.MyDate();
.Это не имеет значения, если я импортирую это наверху.import org.koushik.javabrains.rest.MyDate;
- В начале метода я получаю это предупреждение Параметр типа MyDate скрывает тип MyDate. Этот поставщик работает нормально и может приводить параметры пути запроса, но явсе еще задаюсь вопросом, как я могу избежать вышеупомянутых двух.