JSON 応答の情報を抽出し、ファイルが存在するかどうかを評価する必要があります。次のメソッド定義を使用しています。
override def hasField(field: Field): Boolean = {
val schema = parse(httpClient.doGet(url + Solr5EndpointUris.schemaOverviewEndpoint)).extract[Map[String, Any]]
val fieldsNames: List[String] = schema.get("schema") match {
case schema: Some[Map[String, Any]] => schema.get(if (field.dynamic) "dynamicFields" else "fields") match {
case fields: List[Map[String, Any]] => fields.map {
case field: Map[String, Any] => field.get("name") match {
case name: Some[String] => name.getOrElse("")
}
}
case _ => throw new ApiException("Malformed Response! Missing definition for schema > fields/dynamicFields.")
}
case _ => throw new ApiException("Malformed Response! Could not extract schema from JSON.")
}
fieldsNames.contains(field.name)
}
このメソッドは、パターン マッチングを介して JSON 応答を検査し、特定の名前のフィールドが存在する場合は true を返す必要があります。JSON 応答の例は次のようになります。
{
"responseHeader":{
"status":0,
"QTime":2},
"schema":{
"name":"example-data-driven-schema",
"version":1.5,
"uniqueKey":"id",
"fieldTypes":[],
"fields":[{
"name":"id",
"type":"string",
"multiValued":false,
"indexed":true,
"required":true,
"stored":true}],
"dynamicFields":[],
"copyFields":[]
}
}
この実装は機能しますが、これを達成するためのより単純で複雑でない実装があると確信しています。また、次のような多くの警告が表示されます。
SchemaManager.scala:38: 型パターン Some[Map[String,Any]] の非変数型引数 Map[String,Any] は、消去によって削除されるため、チェックされていません
誰もがより良い解決策を提供できますか、および/または私が得た警告を説明できますか?