Olá pessoal, vou expor algumas duvidas que surgiu com a aula 6 e 7.
Eu queria entender melhor como o Spring trabalha com a classe ValidationUtils. para isso vou descrever o meu entendimento e posteriormente descrever minhas duvidas, caso eu tenha entendido errado, peço que me corrija.
No método rejectIfEmpty() da class ValidationUtils, é evidente que ele recebe os seguintes parâmetros (Errors errors, String field, String errorCode)
e logo depois chama uma sobrecarga mandando + 2 parâmetros null: rejectIfEmpty(errors, field, errorCode, null, null)
, mas o que significa esses 2 últimos parâmetros, no metodo diz ser Object[] errorArgs, String defaultMessage, mas não entendi como utiliza-los e nem seu propósito. Abaixo deixo os respectivos métodos da class mencionada no texto.
class ValidationUtils:
public static void rejectIfEmpty(Errors errors, String field, String errorCode) {
rejectIfEmpty(errors, field, errorCode, null, null);
}
public static void rejectIfEmpty(
Errors errors, String field, String errorCode, Object[] errorArgs, String defaultMessage) {
Assert.notNull(errors, "Errors object must not be null");
Object value = errors.getFieldValue(field);
if (value == null || !StringUtils.hasLength(value.toString())) {
errors.rejectValue(field, errorCode, errorArgs, defaultMessage);
}
}
Outra dúvida é sobre o parâmetro errorCode, ele pode receber qualquer String ? Ele funciona como uma chave para fazer o relacionamento com o arquivo message.properties ? Não entendi muito bem, pois o professor utilizou o field.required e eu utilizei campo.obrigatorio como errorCode, colocando no properties da seguinte forma: campo.obrigatorio.produto.titulo = O titulo é obrigatório. segue abaixo o código da minha implementação.
class ProdutoValidation
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "titulo", "campo.obrigatorio");
ValidationUtils.rejectIfEmpty(errors, "descricao", "campo.obrigatorio");
Produto produto = (Produto) target;
if(produto.getPaginas() <= 0){
errors.rejectValue("paginas", "campo.obrigatorio");
}
}
arquivo message.properties
campo.obrigatorio = Campo obrigatório
campo.obrigatorio.produto.titulo = O titulo é obrigatório
campo.obrigatorio.produto.paginas = O campo páginas é obrigatório
campo.obrigatorio.produto.descricao = O campo descrição é obrigatório
typeMismatch = o tipo do dado é inválido
E por fim, queria entender o typeMismatch, sei que ele indica que aconteceu um problema de conversão, mas como o Spring associou ele ao field paginas? Já que o professor informou no método validate que o field paginas era "field.required"; se é o Spring que identifica isso, teria alguma especificação para que eu possa dar uma olhada? estou curioso para saber se existe outros comandos como o typeMismatch. Posso estar falando besteira mas é porque eu realmente não entendi.