web-dev-qa-db-ja.com

日付フィールドと日付時刻フィールドを交互に表示する

私は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は "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 repoが見つかりませんでした。 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

助けてください。

10
Sourav

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

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

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

2)上記と同じように、Java8のLocalDateを使用します。

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

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

その後、スキャン時にswaggerはこれをdate形式の文字列として検出します。

7
fehguy

私のチームメイトが修正を見つけました。以前はspringfox 2.2.2バージョンを使用していたのに、springfoxバージョンを2.3.0にアップグレードする必要がありました。その古いバージョンでは、swaggerの@ApiModelPreportyには何も実行していなかった「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

7
Sourav