17

私はswaggerを使用して残りのAPIをテストしています.私のエンティティクラスのプロパティの1つは、日付が必要な日付フィールドです yyyy-mm-dd 形式ですが、swaggerモデルスキーマは、このフィールドを日時ではなく日付/時間として表示しています日付フィールドであるため、日付と時間とゾーンが表示されます。この日時を日付フィールドに変換するにはどうすればよいですか?

私は Java エンティティ クラス TimeEntry.java を持っています。そのプロパティの 1 つは Date です。次のようになります。

@ApiModelProperty(required = true)
@JsonFormat(pattern = DATE_FORMAT)
private Date date;

このフィールドの場合、swagger UI モデル スキーマでは、フィールドの日付は "date": "2016-01-08T22:34:22.337Z" として表示されますが、これは "date":"2016-01-08" として必要です。

私は次のことを試しました:

1.

@ApiModelProperty(required = true, dataType="date")  
@JsonFormat(pattern = DATE_FORMAT)   
private Date date;

2.このコードに従ってみました (OverrideConvertor クラスをオーバーライドします) が、swagger-core 1.3 バージョン mvn リポジトリが見つかりませんでした。利用できるのは 1.5 バージョンのみですhttps://github.com/swagger-api/swagger-core/wiki/overriding-models

  1. どうやら 1.5 バージョンから、OverrideConvertor クラスを削除したようです https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4

助けてください。

4

2 に答える 2

14

問題 (実際の問題の 1 つ)java.util.Dateは、それが実際には日付/時間であり、swagger がそれを正しく検出することです。これも回避策であることを理解してい@JsonFormatます.swaggerは、型検出中にその注釈をサポートしていません。

日付タイプを適切に処理するには、3 つのオプションがあります。

1) Joda のLocalDateデータ型を使用します。を宣言するとprivate LocalDate date、正しく表示されます。

LocalDate2)上記と同じように、java8 を使用します。

3) 注釈で型を検出するときに上記のいずれかを使用するように swagger に指示しますが、プロパティは type のままにしますjava.util.Date

@ApiModelProperty(required = true, dataType = "org.joda.time.LocalDate")

次に、スキャン時に、swagger はこれをdateフォーマットされた文字列として検出します。

于 2016-01-12T17:50:56.843 に答える
13

私のチームメイトが修正を見つけました。以前は springfox 2.2.2 バージョンを使用していたため、springfox バージョンを 2.3.0 にアップグレードする必要がありました。その古いバージョンでは、swagger の @ApiModelPrereporty には、何もしていない「example」という属性があります。バージョン 2.3.0 バージョンから、この「例」が機能し始めました。したがって、springfox のバージョンを 2.3.0 にアップグレードした後は、次のようにするだけです。

@ApiModelProperty(required = true,example = "2016-01-01")
@JsonFormat(pattern = DATE_FORMAT)
private LocalDate date; 

以下は、この情報を見つけたリンクです。

https://github.com/springfox/springfox/issues/998

于 2016-01-25T20:59:47.677 に答える