1
resposta

[Dúvida] erro 500 dizendo que um campo é nulo mesmo que na requisição não esteja nulo

estou montando uma api parecida com a da formação java e spring boot, e ao fazer a requisição post, o erro dado é esse:

"message": "could not execute statement [Column 'crm' cannot be null] [insert into medicos (crm,especialidade) values (?,?)]; SQL [insert into medicos (crm,especialidade) values (?,?)]; constraint [null]"

a requisição é essa:

{ "nome": "Roberto Alves", "nascimento": "10-08-2001", "cpf": "12345678901", "crm": "1234", "especialidade": "ORTOPEDIA", "endereco" : { "logradouro": "rua", "rua": "rua", "uf": "RJ", "cidade": "Nova Iguaçu" } }

e o DTO que recebe os dados é esse:

public record DadosMedico(

    @NotBlank
    String nome,

    @NotBlank
    String nascimento,

    @NotBlank
    String cpf,

    @NotBlank
    @Pattern(regexp = "\\d{4,6}")
    String crm,

    @NotBlank
    EspecialidadeMedico especialidade,

    @NotBlank
            @Valid
    DadosEndereco endereco,


    String salario

) { }

o que tá acontecendo?

1 resposta

Olá, Kelthon!

Pelo que pude perceber, o erro "Column 'crm' cannot be null" indica que o campo 'crm' está sendo considerado nulo em algum momento durante a execução do seu código, mesmo que você esteja passando um valor para ele na requisição.

Uma possibilidade é que o valor de 'crm' não esteja sendo corretamente mapeado para o objeto DadosMedico. Isso pode acontecer se, por exemplo, o nome do campo na requisição não corresponder exatamente ao nome do campo na classe DadosMedico.

No seu caso, o campo 'crm' na requisição e na classe parecem estar corretos, mas é sempre bom verificar se não há nenhum erro de digitação ou diferença de maiúsculas e minúsculas.

Outra possibilidade é que a anotação @Pattern esteja causando o problema. Essa anotação é usada para validar se o valor de um campo corresponde a uma expressão regular, e se o valor não corresponder, o campo será considerado inválido. No seu caso, a expressão regular "\d{4,6}" indica que o valor de 'crm' deve ser um número de 4 a 6 dígitos. Se o valor de 'crm' na requisição não corresponder a essa expressão regular, ele será considerado inválido e, portanto, nulo.

Para verificar se esse é o problema, você pode tentar remover temporariamente a anotação @Pattern do campo 'crm' e ver se o erro persiste.

Espero ter ajudado e bons estudos!