web-dev-qa-db-fra.com

De post man (service de repos) comment envoyer la date json (format de chaîne) à Java qui accepte l'objet date

Comment lier la valeur dateOfJoining (type String) à la variable membre "dateOfJoining" (type Date) dans la classe "DateInput" après l'envoi sous JSON via postman. Comment convertir un objet String en Date dans Java avec le même format jj/MM/aaaa. La date convertie doit être dans l'objet Date mais pas String.

Json est comme indiqué ci-dessous

{
 "dateOfJoining" : "03/04/2017"
}

URL de service frappée dans le facteur - localhost/Rest/hello

Classe RestService dans Java - HandleRestRequest.Java

@RestController
public class HandleRestRequest
{

  @RequestMapping("\hello");
  public List setRequestParams(@RequestBody DateInput dateInput)
 {
   .......
  }
 }

 Pojo Class DateInput.Java

  public class DateInput
 {
  private  Date dateOfJoining;
   .......
  }

Si j'envoie la date de json dans le format ci-dessous, son erreur de lancement comme entrée non satisfaite

 {
  "dateOfJoining" : 04/04/2017
 }

Je l'ai donc envoyé sous forme de chaîne et en modifiant dateOfJoining sous forme de chaîne dans le fichier DateInput.Java, puis j'ai essayé de le convertir en objet date comme ci-dessous.

Fichier DateInput.Java modifié de Date en chaîne

 public class DateInput
 {
  private  String dateOfJoining;
   .......
 }

JSON modifié

{
 "dateOfJoining" : "04/04/2017"
}

Code pour convertir l'entrée utilisateur de la chaîne en date

 DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
  String convertedDate = sdf.format(dateInput.getDateOfJoining());

Sa conversion au format requis, mais le type de retour est String, mais il est prévu que l'objet Date envoie la couche DAO. J'ai donc essayé sdf.parse, son objet Date de retour mais pas au format requis

Date date = sdf.parse(sdf.format(dateInput.getDateOfJoining()));
output is like -  Tue Apr 04 00:00:00 IST 2017
expected is 04/04/2017 (with return type Date object).

Alors s'il vous plaît, aidez-moi à convertir la chaîne en objet de date avec le format requis, car la couche DAO attend une entrée en tant qu'objet de date au format jj/mm/aaaa

8
Phalani Kumar

Modifier: mise à jour de la réponse conformément à la question mise à jour.

Utiliser l'annotation @JsonFormat from Jackson Databind pour spécifier le modèle de date.

public class DateInput
 {
  @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="dd-MM-yyyy")
  private  Date dateOfJoining;
   .......
  }
8
santosh-patil

changez votre code en l'extrait de code ci-dessous

public List setRequestParams(@RequestParam("dateOfJoining")@DateTimeFormat(pattern="dd-MM-yyyy")  DateInput dateInput)
{
   ...
}
0
srikanth

Avec JSON-B (inclus dans Java EE 8), vous pouvez le faire:

class DateInput {
    @JsonbDateFormat("dd/MM/yyyy")
    public Date dateOfJoining;
}

Dans mes tests avec Thorntail 2.4, je n'ai besoin d'aucune annotation pour le format ISO lors de l'utilisation de Java.util.Date:

{
    "dateOfJoining" : "2019-04-28T14:45:15"
}
0
Panu Haaramo