Unparseable date: "2017-10-30T02: 00: 00.000Z"

0

I'm setting up a record where I pass a date and, upon saving, is showing this error

java.text.ParseException: Unparseable date: "2017-10-30T02:00:00.000Z"
    at java.text.DateFormat.parse(Unknown Source) ~[na:1.8.0_144]
    at controller.saude.PacientesController.cadastrarPacientes(PacientesController.java:77) ~[classes/:na]

My save method

@RequestMapping(method = RequestMethod.POST, value = "/pacientes")
    public HttpStatus cadastrarPacientes(@RequestBody ObjectNode json) throws ParseException  {

        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

            Entidades entidades = new Entidades();
            entidades.setIdEntidade(json.get("pessoa").get("entidade").get("idEntidade").asLong());

            Pessoas pessoas = new Pessoas();
            pessoas.setNome(json.get("pessoa").get("nome").textValue());
            pessoas.setNomeSocial(json.get("pessoa").get("nomeSocial").textValue());
            pessoas.setFoto(json.get("pessoa").get("foto").textValue());
            pessoas.setNomeSocial(json.get("pessoa").get("nomePai").textValue());
            pessoas.setNomeMae(json.get("pessoa").get("nomeMae").textValue());
            pessoas.setDataNascimento(formato.parse(json.get("pessoa").get("dataNascimento").textValue()));
            pessoas.setEntidade(new Entidades());
            pessoas.setEntidade(entidades);
            pessoas.setTipoPessoa(json.get("pessoa").get("tipoPessoa").textValue());
    }

Use html and angular on front -end

<div class="form-group col-md-3">
    <label>Data Nascimento :</label> <input   name="data" id="data"  type="date" class="form-control" ng-model="paciente.pessoa.dataNascimento" format-date />
</div>

And I'm using this directive

app.directive("formatDate", function() {
    return {
        require: 'ngModel',
        link: function(scope, elem, attr, modelCtrl) {
            modelCtrl.$formatters.push(function(modelValue) {
                if (modelValue){
                    return new Date(modelValue);
                }
                else {
                    return null;
                }
            });
        }
    };
});

json that is coming in the back end is like this ...

{
    "pessoa": {
        "nome": "aa",
        "nomeSocial": "aa",
        "dataNascimento": "2017-10-30T02:00:00.000Z",
        "tipoPessoa": "F",
        "entidade": {
            "idEntidade": "1"
        },
        "nomeMae": "a"
    }
}
    
asked by anonymous 29.11.2017 / 20:02

2 answers

4

The pattern used in SimpleDateFormat must represent the format of the date you receive.

Instead of:

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

Use:

SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

In the documentation for the SimpleDateFormat class there is a table relating each letter to the element it represents.

    
29.11.2017 / 20:35
0

For me without the Z in the end it worked:

SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    
25.05.2018 / 15:32