Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Características das colunas das Entidades nos formulários (DTOs) no momento da validação

Para ficar mais fácil de entender minha duvida, vou resumir duas classes Curso e CursoForm.

// pacote e importações omitidas 

@Entity
public class Curso {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(length = 200, unique = true, nullable = false)
    private String nome;

    // getters e setters omitidos

}
// pacote e importações omitidas 

@ApiModel(description = "Formulário utilizado para cadastro/atualização de um novo Curso")
public class CursoForm {

    @NotNull
    @NotEmpty
    @Size(max = 200)
    @ApiModelProperty(value = "Nome do curso", example = "Ciência da Computação")
    private String nome;

    // getters, setters e demais métodos omitidos
}

Com base nessas classes, se eu quiser fazer a validação do formulário quando estou chamando a API para criar um novo curso, eu coloco a anotação @Valid antes do parâmetro da requisição correspondente ao formulário. O problema que identifiquei nisso é que se eu mudar o length do atributo nome da classe Curso, eu tenho que ajustar também a classe CursoForm. Minha duvida é: existe alguma anotação ou abordagem para evitar essa atualização nas duas classes? Conheci esse padrão DTO no curso de API Rest com Spring Boot.

1 resposta
solução!

Oi Mateus,

Infelizmente não tem como =/

E essa é uma das desvantagens de se utilizar esse esquema do DTO, pois você acaba ficando com o código "meio repetido".

Entretanto, na verdade não é bem uma repetição, pois o @Column é para validação a nível de banco de dados, no tamanho da coluna na tabela.

Já o @Size é para validação de formulário, a nível de aplicação.

São 2 camadas de validação distintas.

Mas se essa validação mudar futuramente, as 2 classes terão que ser alteradas.

Bons estudos!