1
resposta

Dúvida quanto a estrutura do JSON

Boa tarde!

Tenho uma dúvida com a relação à estrutura do json. Eu optei por iniciar uma classe User e seu DTO recebe uma Collection de números de celulares dentre outros parâmetros. Entretanto, quando tento fazer a inserção de um user, aparece um erro dizendo que o json não conseguiu desserializar os parâmetros passados para o controller para o record UserDTO. Alguém poderia me ajudar?

Esse é o meu DTO:

public record StudentDTO
(
     @JsonAlias("firstname") String firstName,
     @JsonAlias("lastname") String lastName,
     @JsonAlias("phones") Collection<PhoneDTO> phones,
     @JsonAlias("email") EmailDTO email,
     @JsonAlias("username") String username,
     @JsonAlias("password") String password,
     @JsonAlias("password_confirm") String passwordConfirm
) { }

Esse é o JSON inserido:

{
    "firstname": "Student",
    "lastname": "001",
    "phones": {
        "phone1": [
            {
                "number": "+55 (21) 99999-9999"
            }
        ],
        "phone2": [
            {
                "number": "+55 (21) 99999-9999"
            }
        ]
    },
    "email": "student@example.com"
    "username": "stu_88",
    "password": "student@99",
    "password_confirm": "studen@99"
}

Essa é a mensagem que eu recebo do Postman quando tento inserir um JSON:

"message": "com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.util.ArrayList<empire_foundation.web.records.access.PhoneDTO> from Object value (token JsonToken.START_OBJECT)\n at [Source: REDACTED (StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION disabled); line: 4, column: 15] (through reference chain: empire_foundation.web.records.access.StudentDTO["phones"])"

1 resposta

Olá Diogo, espero que esteja bem!

pelo que entendi, você está tentando usar o postman para enviar uma requisção com JSON do segundo bloco, seria isso ?

Parece que O DTO StudentDTO espera que o campo phones seja uma coleção de objetos PhoneDTO. Isso significa que o JSON deve conter uma lista (array) de telefones. Mas o seu JSON envia phones como um objeto com várias propriedades (phone1, phone2, etc.), o que não é compatível com o tipo de dados que você definiu

eu precisaria ver o seu Phone DTO, mas a estrutura seria algo como isso aqui:

 
{
  "firstname": "Student",
  "lastname": "001",
  "phones": [
    { "number": "+55 (21) 99999-9999" },
    { "number": "+55 (21) 99999-9999" }
  ],
  "email": "student@example.com",
  "username": "stu_88",
  "password": "student@99",
  "password_confirm": "student@99"
}

espero ter te ajudado, se tiver mais dúvidas só mandar!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade