У меня есть реализация Interceptor
, которая добавляет требуемый заголовок к запросу. Время от времени разработчики забывают добавить обязательную аннотацию @Header("foobar")
в метод интерфейса сервиса. В этом случае мой Interceptor
выбрасывает IllegalArgumentException
, указывая отсутствующую аннотацию. К сожалению, в сообщении об исключении не ясно, какой метод службы был вызван.
Я хочу предоставить имя метода обслуживания, который был вызван. Это возможно?
Вот мой (котлин) код:
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val identifier = request.header(REQUIRED_HEADER) ?: run {
val methodName= // how to get the service method name?
throw IllegalArgumentException("Missing annotation >@Header(REQUIRED_HEADER)< on service method: $methodName ")
}
Дооснащение само по себе может добавить имя метода в случае, если параметр не помечен аннотацией дооснащения.
java.lang.IllegalArgumentException: No Retrofit annotation found. (parameter #1)
for method HonkAndFlashFalService.startHonkAndFlash
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:755)
at retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:746)
at retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod.java:764)