Я создал несколько смешанных методов.Код и пример ниже:
URL.metaClass.withCreds = { u, p ->
delegate.openConnection().tap {
setRequestProperty('Authorization', "Basic ${(u + ':' + p).bytes.encodeBase64()}")
}
}
URLConnection.metaClass.fetchJson = {
delegate.setRequestProperty('Accept', 'application/json')
delegate.connect()
def code = delegate.responseCode
def result = new JsonSlurper().parse(code >= 400 ? delegate.errorStream : delegate.inputStream as InputStream)
[
ok : code in (200..299),
body: result,
code: code
]
}
пример использования:
new URL("$baseUrl/projects/$name").withCreds(u, p).fetchJson().find {
it.ok
}?.tap{
it.repos = getRepos(it.key).collectEntries { [(it.slug): it] }
}
}
Когда я не использую find (), мой объект, как и ожидалось, является картой сэти 3 элемента.Когда я использую, find it
- это Map.Entry с ключом ok
и значением true
, который выдает эту ошибку:
groovy.lang.MissingPropertyException: No such property: ok for class: java.util.LinkedHashMap$Entry
Possible solutions: key
Это произошло со мной, когда я написал этонапишите, что он рассматривался как карта итеративная и, таким образом, просматривая каждую запись, которую я впоследствии проверил.Как мне find
на всю карту?Я хочу it.ok
, потому что, если это правда, мне нужно нести это вперед