J'ai une exigence où je dois mapper ma valeur de la demande entrante en tant que JSON à ce jour dans l'un des formats.
Par exemple, dans ma demande, je peux obtenir la chaîne de date comme l'un des formats ci-dessous: Comment mapper ma valeur de carte entrante à ce jour. P> P>
5 Réponses :
Je suggérerais que vous puissiez utiliser la bibliothèque Jodatime pour implémenter celui-ci
Vous pouvez utiliser plusieurs analyseurs et les ajouter au constructeur à l'aide de DateTimeformatterBuilder.Append la méthode: P>
DateTimeParser[] parsers = { DateTimeFormat.forPattern( "MM/dd/yyyy" ).getParser(), DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm:ss" ).getParser(), DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm tt" ).getParser() }; DateTimeFormatter formatter = new DateTimeFormatterBuilder().append( null, parsers ).toFormatter(); DateTime date1 = formatter.parseDateTime( "03/22/1990" ); DateTime date2 = formatter.parseDateTime( "03/22/1990 10:34:11" );
Le dernier modèle devrait probablement être "MM / DD / AAAA HH: MM TT" CODE>
Si vous devez utiliser Java.Time (pour une certaine raison), vous pouvez utiliser quelque chose comme ceux-ci:
private Timestamp parseDateFromString(String dateString) { if (StringUtils.isNotBlank(dateString)) { try { final DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); final Date date = df.parse(dateString); return new Timestamp(date.getTime()); } catch (ParseException e) { log.error("Error parsing string: " + dateString, e); } } return null; }
Les trois formats que vous avez mentionnés peuvent facilement être identifiés à l'aide de Regex. Par exemple, le motif Ensuite, vous pouvez utiliser SimpleDateformatter avec le format identifié. E.g. P> \ d \ d \ / \ d \ d \ / \ d \ d \ d \ d \ d \ d: \ d \ d: \ d \ d code> correspondrait à la deuxième chaîne Dans votre exemple, mais pas les deux autres.
Donc, vous pouvez utiliser cette solution une solution
Je pense que vous devez résoudre deux problèmes ici:
En ce qui concerne le premier problème, vous pouvez utiliser Joda ou Java 8. Je vais coller à Java 8, car le nouveau Concernant Json, je suggère d'utiliser la bibliothèque Jackson, car il est extrêmement flexible et vous pouvez créer vos propres désérialiseurs personnalisés avec elle. P> Pour importer la bibliothèque Jackson, vous pouvez utiliser le Suite à des dépendances mavennes: p> Le désérialiseur par défaut doit être emballé dans un module. Voici quelques échantillons de code de désérialiseur: p> alors vous pouvez utiliser ce module simple avec Serializer pour mapper JSON vers des classes: P> java.time code> Les bibliothèques peuvent gérer les formats de votre question. p>
java.time.format.DateTimeParseException: Text '03/22/1990 12:34:45' could not be parsed, unparsed text found at index 10
java.time.format.DateTimeParseException: Text '03/22/1990 12:23 AM' could not be parsed, unparsed text found at index 10
java.time.format.DateTimeParseException: Text '03/22/1990 12:23 AM' could not be parsed at index 16
DateJson{BookingDate=1990-03-22T00:00, CreatedOn=1990-03-22T12:34:45, ModifiedOn=1990-03-22T00:23}
Vous pouvez utiliser un désérialiseur personnalisé qui, par bruteforce (
essayer de prendre code>) essaie d'analyser une date
Quelle bibliothèque Java utilisez-vous? Jackson?
Vous pouvez utiliser une certaine validation de la chaîne de base pour déterminer comment analyser, # 1 doit être facilement reconnaissable à l'aide de
longueur () code> et # 3 en effectuant
contient ("m") code>
Êtes-vous plus intéressé de savoir comment analyser le JSON ou sur la manière de gérer l'analyse après analyse JSON?
Je sens que c'est une mauvaise conception de l'API