Tenho a seguinte classe “complexa”:
class Pessoa {Long id; String nome; List<Endereco> enderecos; //etc...}
class Endereco {Long id; Pessoa pessoa; Cidade cidade; String bairro; String tipoendereco; //etc...}
Tenho um controller PessoaController:
@Post("/pessoa")
@Consumes(value = { "application/json", "application/x-www-form-urlencoded" })
public void gravar(Pessoa pessoa){
}
Neste ponto tenho um problema com JSON: ele não usa os métodos Setters dos objetos, ou seja, se por exemplo no método setNome eu queira criar um Slug do nome eu não consigo. Eu teria que Criar um novo objeto e popular ele manualmente copiando as propriedades do objeto “pessoa” ou seja a deserialização nesse caso foi um processo inútil?
Outro problema é usando Angular, este projeto é back-end, e no front-end com Angular eu preciso conhecer os Models e seus relacionamentos. Devo criar um Wrapper ou DTO pra cada caso?
Pensei no método do controller receber ao invés do objeto Pessoa somente os atributos que eu quero:
@Post("/pessoa")
@Consumes(value = { "application/json", "application/x-www-form-urlencoded" })
public void gravar(String nome,List<Endereco> enderecos){
Pessoa pessoa = new Pessoa();
pessoa.setNome(nome);
for(Endereco endereco : enderecos){
pessoa.addEndereco(endereco);
}
}
Mas como fazer pra receber a lista de endereços sem que o front-end conheça ele exemplo de JSON a receber:
{nome : "zé" , enderecos:[ endereco1 : [tipoendereco : "Residencial", bairro : "centro"] , endereco2 : [tipoendereco : "Cobrança", bairro: "morumbi"] ] }
Qualquer sugestão é bem vinda.