Por que não funciona com Records e com classes "normais" funciona?
EXEMPLO A SEGUIR FUNCIONA COM CLASSE
@Getter
public class TesteFormPadrao {
private String primeiroNome;
private String sobrenome;
}
EXEMPLO A SEGUIR NÃO FUNCIONA COM RECORD
public record TesteForm(
String primeiroNome,
String sobrenome) {
}
MINHA CLASSE DE DOMINIO (ENTITY) ESTÁ TUDO IGUAL PRA FACILITAR
@Getter
@EqualsAndHashCode
public class TesteEntity {
private String primeiroNome;
private String sobrenome;
@Deprecated
public TesteEntity(){}
public TesteEntity(String primeiroNome, String sobrenome) {
this.primeiroNome = primeiroNome;
this.sobrenome = sobrenome;
}
}
MEU CONTROLLER ESTÁ DESTA FORMA SIMPLES
@RestController
@RequestMapping("/teste")
public class TesteController {
@GetMapping
public TesteEntity retornoDTO(@RequestBody TesteFormPadrao form) {
ModelMapper modelMapper = new ModelMapper();
return modelMapper.map(form, TesteEntity.class);
}
}
A explicação do chatGPT é que a lib foi desenvolvida ANTES do JDK 17 e como a release OFICIAL dos RECORDS foram nesta versão, embora em forma BETA no JAVA 14 e aperfeiçoada nas versões seguintes, só tomou vida na versão 17 e como o ModelMapper é anterior não fornece suporte ao Records.
Porém, entretanto, todavia... Estou neste dilema:
- Sacrifico meus Records, uso "classe normal" e crio um acoplamento com o Lombok pra evitar Boilerplate code;
- Faço na mão o mapper de Record pra Entity
Quero discutir aqui se tem alguém que já conseguiu fazer esta gambiarra ou tem uma dica ou sabe se tem alguma lib que trabalhe com RECORDS na chamada do método. Até porque ficar usando lombok não sei se é uma boa prática tendo em vista que muitas empresas não liberam no Nexus a dependência. Enfim... sugestões?