0

次のようなアクティブなレコードがあります。

case class Person(name: String) extends ActiveRecord
object Person extends ActiveRecordCompanion[Person]

Swagger アノテーションを追加しました。

@ApiModel(value = "Person", description = "A person.")
case class Person(
                 @ApiModelProperty(value = "A person's name")
                   name: String) extends ActiveRecord
object Person extends ActiveRecordCompanion[Person]

生成されたスキーマには、使用できない多くのジャンクが含まれています。

"Person": {
      "id": "Person",
      "description": "A person.",
      "properties": {
        "name": {
          "type": "string"
        },
        "valid": {
          "type": "boolean"
        },
        "errors": {
          "$ref": "Errors"
        },
        "id": {
          "type": "integer",
          "format": "int64"
        },
        "persisted": {
          "type": "boolean"
        },
        "_companion": {
          "$ref": "com.github.aselab.activerecord.inner.ProductModelCompanion<com.github.aselab.activerecord.inner.ProductModel>"
        },
        "_isNewRecord": {
          "type": "boolean"
        },
        "newRecord": {
          "type": "boolean"
        },
        "com$github$aselab$activerecord$ActiveRecordBase$$_isDeleted": {
          "type": "boolean"
        },
        "recordCompanion": {
          "$ref": "com.github.aselab.activerecord.ActiveRecordBaseCompanion<java.lang.Object, com.github.aselab.activerecord.ActiveRecordBase>"
        },
        "com$github$aselab$activerecord$validations$Validatable$$_validated": {
          "type": "boolean"
        },
        "deleted": {
          "type": "boolean"
        }
      }
    }

のソースコードを調べましたswagger-coreModelPropertyParser以下を含むwith a メソッドがありparseRecursiveます。

for (field <- hostClass.getDeclaredFields) {
        if (Modifier.isPublic(field.getModifiers()) && !Modifier.isStatic(field.getModifiers()) && !ignoredProperties.contains(field.getName) && !field.isSynthetic()) {
          if (ignoredProperties.contains(field.getName)) {
            LOGGER.debug("ignoring property " + field.getName)
          } else {
            parseField(field)
          }
        }
      }

      Option(hostClass.getSuperclass).map(parseRecursive(_))

私が実行すると:

> classOf[Person].getDeclaredFields
Array[java.lang.reflect.Field] = Array(private final java.lang.String sk.essentialdata.ress.search.db.Person.name)

1 つのフィールドだけを宣言したので、正しいです。

私が実行すると:

classOf[Person].getSuperclass.getDeclaredFields
res6: Array[java.lang.reflect.Field] = Array(private final long com.github.aselab.activerecord.ActiveRecord.id, private boolean com.github.aselab.activerecord.ActiveRecord.com$github$aselab$activerecord$ActiveRecordBase$$_isDeleted, private final com.github.aselab.activerecord.ActiveRecordBaseCompanion com.github.aselab.activerecord.ActiveRecord.recordCompanion, private final com.github.aselab.activerecord.validations.Errors com.github.aselab.activerecord.ActiveRecord.errors, private boolean com.github.aselab.activerecord.ActiveRecord.com$github$aselab$activerecord$validations$Validatable$$_validated, private final com.github.aselab.activerecord.inner.ProductModelCompanion com.github.aselab.activerecord.ActiveRecord._companion, private boolean com.github.aselab.activerecord.ActiveRecord...

ActiveRecord の内部フィールドはたくさんあります。このジャンクを取り除く方法はありますか?fieldInfoSwagger の説明に次のフィールドを含めるだけです。

> Person.fieldInfo
scala> res0: Map[String,com.github.aselab.activerecord.reflections.FieldInfo] = Map(name -> FieldInfo(name,class java.lang.String,false,false,WrappedArray()), id -> FieldInfo(id,long,false,false,WrappedArray()))
4

1 に答える 1

1

ここを見ると、ebeanサブクラスの特別な処理が見られます。ActiveRecordCompanion次のように同じものを簡単に追加できます。

  • スキップしたいパッケージで を拡張ModelConverterしてオーバーライドするpropertyPackagesToSkip
  • これを使用して、新しい ModelConverter をコンバーター チェーンに追加します。

    ModelConverters.addConverter(yourConverter, true) // チェーンの最初に配置します

モデル処理が、スキップしているクラスをトラバースしないようにする必要があります。

于 2015-02-25T14:59:55.963 に答える