Navegação

    Fórum Técnico Insoft4

    • Login
    • Pesquisar

    Definindo maxSize de forma dinâmica para classes Groovy que implementam Validateable

    Desenvolvimento
    1
    1
    4
    Carregando Mais Posts
    • Mais Antigo para Mais Recente
    • Mais Recente para Mais Antigo
    • Mais Votados
    Responder
    • Responder como tópico
    Entre para responder
    Este tópico foi deletado. Apenas usuários com privilégios de moderação de tópico podem vê-lo.
    • G
      gustavo_siqueira Desenvolvimento última edição por gustavo_siqueira

      Geralmente nossas classes groovy (DomainClass, Command, DTO) precisam validar o limite de dados dos atributos e quase sempre um valor fixo resolve:

      class ControlePessoa {
        
        String nome
      
        constraints = {
          nome nullable: false, maxSize: 50
        }
      }
      

      Embora esse formato seja o mais comum, eventualmente será necessário definir um valor dinâmico para o limite desse atributo.

      E como fazemos isso?

      Definindo um validator customizado.

      Implementação do validator dentro da própria classe

      class ControlePessoa {
        
        String nome
      
        constraints = {
          nome nullable: false, validator: { val, obj ->
            boolean possuiIntegracao = new PackIntegracaoAkitaDao().getPossuiIntegracao() == '4'
          
            int maxSize = possuiIntegracao ? 60 : 100
          
            if (val && val.size() > maxSize) {
              return ['maxSize.exceeded', maxSize]
            }
          
            return null
          
          }
      }
      

      Implementação do validator em uma classe própria

      class ControlePessoa {
        
        String nome
      
        constraints = {
          nome nullable: false, validator:  IntegracaoAkitaValidator.maxSize(60, 100)
        }
      }
      
      class IntegracaoAkitaValidator {
      
         static Closure maxSize(int maxSizeComIntegracao, int maxSizeSemIntegracao) {
             return { val, obj ->
                 boolean possuiIntegracao = new PackIntegracaoAkitaDao().getPossuiIntegracao() == '4'
                 int maxSize = possuiIntegracao ? maxSizeComIntegracao : maxSizeSemIntegracao
                 if (val && val.size() > maxSize) {
                     return ['maxSize.exceeded', maxSize]
                 }
                 return null
             }
         }
      
      }
      
      1 Resposta Última resposta Responder Citar 1
      • Primeiro post
        Último post
      Powered by NodeBB | Contributors