1
votes

MongoRepository @Query Impossible d'analyser la chaîne en tant que date

Tout d'abord, mon problème est de rechercher des collections dans MongoDB via Spring JPA (MongoRepository).

Mon objet:

@Query("{ 'start_date' : {$gte : {'$date': '?0'}, $lte :{'$date': '?1'} }}")
List<Event> findAllEventByTime(String from, String to);

Je peux faire ce que je souhaite dans Mongo requête comme:

@Query("   $or: [ {start_date : {$gte :ISODate( ?0 ) , $lte :ISODate( ?1)}} , {end_date : {$gte :ISODate( ?0) , $lte :ISODate( ?1)}} ]  }  ")
List<Event> findAllEventByTime(String from, String to);

(vous pouvez remplacer ISODate par une nouvelle date)

Mais pour le faire au printemps, je veux le faire comme: p>

db.getCollection('event').find({"start_date" : {$gte :ISODate( "2019-02-03T02:37:42.152Z") , $lte :ISODate( "2019-02-08T02:37:42.152Z")}})

Mais ça a échoué, j'ai cherché dans deux sujets: ici et là-bas

et finir avec

{
    "_id" : ObjectId("5c78e1f447f39c2eacb229d7"),
    "lab" : "xxx",
    "type" : "Holiday",
    "description" : "Lunar New Year",
    "start_date" : ISODate("2019-02-04T02:37:42.152Z"),
    "end_date" : ISODate("2019-02-08T06:37:42.152Z"),
    "all_day" : true,
    "_class" : "xxx.Event"
}

Mais encore une fois, j'ai eu un problème avec l'analyse:

2019-03-22 10: 09: 48.261 ERREUR 9316 --- [XNIO-2 task-1] o.z.problem.spring.common.AdviceTrait: Erreur de serveur interne

org.bson.json.JsonParseException: échec de l'analyse de la chaîne en tant que date à org.bson.json.JsonReader.visitDateTimeExtendedJson (JsonReader.java:1057)

J'essaye avec recomment:

Try param: Fri Mar 22 10:09:48 ICT 2019 and 2019-03-22T03: 09: 48.227Z and 2016-04-14 00 : 00: 00

Tout ça se passe ... Pouvez-vous m'aider à résoudre ce problème?

Work-Flow: Params from FE (String) ~> Go to BE ~> Call Repo comme ci-dessus


0 commentaires

3 Réponses :


1
votes

Vous pouvez créer la méthode spring data jpa pour la même chose comme ci-dessous: -

List<Event>  findByStart_dateIsAfterAndEnd_dateIsBefore(Date startDate, Date endDate);


2 commentaires

J'essaye: List findAllBystartDate (Instant startdate); et obtenez: 2019-03-22 11: 22: 15.059 ERROR 7740 --- [XNIO-2 task-3] ozproblem.spring.common.AdviceTrait: Erreur interne du serveur org.bson.codecs.configuration.CodecConfigurationException: Can ' t trouver un codec pour la classe java.time.ZonedDateTime.


merci pour votre suggestion, je teste jusqu'au bout et finis par utiliser la conversion automatique de Spring Data JPA, mais nous devons changer le type



0
votes

Je le résous avec une autre méthode:

  1. Dans le référentiel
    • Je ne peux pas effectuer de conversion avec une requête brute ou toute requête nécessitant une conversion de chaîne en date
    • Utiliser la prise en charge des requêtes de génération automatique par MongoRepository
eventRepository.findAllByStartDateBetweenOrEndDateBetween(startDate, endDate, startDate, endDate))
  1. Données d'entrée: Utilisez Instant ou LocalDate / LocalDateTime et convertissez-le en Instant ~> Puis utiliser comme paramètre dans la requête (conversion automatique par Spring)
@RequestParam Instant startDate, @RequestParam Instant endDate

et utilisez:

Page<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2, Pageable pageable);
    List<Event> findAllByStartDateBetweenOrEndDateBetween(Instant fromDate1, Instant toDate1, Instant fromDate2, Instant toDate2);


0 commentaires

0
votes

J'ai eu le même problème lors de l'analyse des dates dans la requête json. C'était un bug dans Spring Data Mongo. La solution consiste à mettre à niveau le parent de démarrage de printemps dans le projet:

<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.2.1.RELEASE</version>
</parent>

La version 2.2.1.RELEASE corrige le problème.


0 commentaires