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
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;
.......
}
changez votre code en l'extrait de code ci-dessous
public List setRequestParams(@RequestParam("dateOfJoining")@DateTimeFormat(pattern="dd-MM-yyyy") DateInput dateInput)
{
...
}
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"
}