web-dev-qa-db-fra.com

champ de date swagger vs champ date-heure

J'utilise swagger pour tester mon api de repos, l'une des propriétés de ma classe d'entité est un champ de date pour lequel j'ai besoin de la date au format aaaa-mm-jj, mais le schéma du modèle swagger affiche ce champ comme date-heure au lieu de champ de date, il donne donc la date avec l'heure et le fuseau. Comment puis-je convertir cette date-heure en champ de date?

J'ai une Java classe d'entité TimeEntry.Java une de ses propriétés est Date, elle ressemble à ceci.

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

pour ce champ, sur le schéma du modèle d'interface utilisateur swagger, la date du champ s'affiche comme "date": "2016-01-08T22: 34: 22.337Z" mais j'en ai besoin comme "date": "2016-01-08".

J'ai essayé ce qui suit:

1.

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

2.Essayé de suivre ce code (remplacer la classe OverrideConvertor) mais n'a pas pu trouver le repo mvn de la version 1.3 de swagger-core. Seule la version 1.5 est disponible https://github.com/swagger-api/swagger-core/wiki/overriding-models

  1. Apparemment, à partir de la version 1.5, ils ont supprimé la classe OverrideConvertor https://groups.google.com/forum/#!topic/swagger-swaggersocket/ChiknyHZiP4

Veuillez aider.

10
Sourav

Le problème (un des problèmes en fait) avec Java.util.Date c'est que c'est vraiment une date-heure, et swagger la détecte correctement en tant que telle. Je comprends que le @JsonFormat est une solution de contournement pour cela également - swagger ne prend pas en charge cette annotation lors de sa détection de type.

Vous disposez de trois options pour gérer correctement les types de date.

1) Utilisez le LocalDate de Joda comme type de données. Si vous avez déclaré private LocalDate date, il apparaîtrait correctement.

2) Utilisez LocalDate de Java8, comme ci-dessus.

3) Dites à swagger d'utiliser l'une des méthodes ci-dessus lors de la détection du type dans l'annotation, mais conservez la propriété en tant que type Java.util.Date:

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

Ensuite, lors de la numérisation, swagger le détectera comme une chaîne au format date.

7
fehguy

Mon coéquipier a trouvé le correctif. Nous devions mettre à niveau la version springfox vers 2.3.0, auparavant nous utilisions la version springfox 2.2.2. Dans cette ancienne version, @ApiModelPreporty de swagger a un attribut appelé "exemple" qui ne faisait rien. Depuis la version 2.3.0, cet "exemple" a commencé à fonctionner. Donc, après avoir mis à niveau la version springfox vers 2.3.0, tout ce que nous avions à faire est comme indiqué ci-dessous.

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

Voici le lien d'où nous avons trouvé ces informations:

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

7
Sourav