Introdução ao MapStruct

Por Gaspar Barancelli Junior em 05 de maio de 2024
Imagem ilustrativa sobre o post Introdução ao MapStruct

No mundo do desenvolvimento de software, especialmente em aplicações Java que utilizam arquitetura de camadas, a transferência de dados entre diferentes camadas é uma prática comum. Aqui, os Objetos de Transferência de Dados (DTOs) desempenham um papel crucial. Neste post, exploraremos como o MapStruct, uma ferramenta de mapeamento de beans Java, pode simplificar e otimizar o uso de DTOs em suas aplicações Java, e como isso pode ajudar a mitigar certas vulnerabilidades de segurança identificadas pelo OWASP.

Por Que Usar DTOs?

DTOs são objetos que carregam dados entre processos, visando reduzir o número de chamadas de método, simplificando assim a transferência de dados. Eles são particularmente úteis em aplicações com uma arquitetura complexa ou distribuída, ajudando na separação e no encapsulamento de dados de diferentes modelos de domínio. Utilizar DTOs permite:

  • Desacoplamento: DTOs ajudam a separar a lógica de apresentação da lógica de negócios.

  • Segurança: Limitam a exposição de modelos de domínio internos e podem ajudar a prevenir a exposição de dados sensíveis.

  • Performance: Reduzem o custo de carga de dados desnecessários que o cliente ou a interface do usuário não necessitam.

Introdução ao MapStruct

MapStruct é uma biblioteca de mapeamento de Java bean que se baseia em convenções de nomenclatura e anotações para simplificar o código necessário para transformar um objeto em outro. Utilizar MapStruct tem várias vantagens:

  • Código Limpo e Mantível: Automatiza o mapeamento de propriedades reduzindo o código boilerplate.

  • Alto Desempenho: O mapeamento é baseado em métodos simples de chamadas diretas, sem uso de reflexão.

  • Fácil de Usar: Define mapeamentos com anotações simples e gera o código em tempo de compilação.

Configuração do MapStruct com Maven e Gradle

Para usar o MapStruct, é necessário adicionar sua dependência e o plugin necessário ao seu projeto Maven ou Gradle:

Maven
...
<properties>
    <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
</properties>
...
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
</dependencies>
...
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source> <!-- depending on your project -->
                <target>1.8</target> <!-- depending on your project -->
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                    <!-- other annotation processors -->
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>
Gradle
dependencies {
    ...
    implementation 'org.mapstruct:mapstruct:1.5.5.Final'

    annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'
}

Exemplo de Código com MapStruct

Suponha que temos uma entidade Usuario e um UsuarioDTO. Vamos usar MapStruct para mapear esses dois objetos:

// Entidade Usuario
public class Usuario {
    private String nome;
    private String email;
    // getters e setters
}


// UsuarioDTO
public class UsuarioDTO {
    private String nome;
    private String email;
    // getters e setters
}


// Interface de Mapeamento MapStruct
@Mapper
public interface UsuarioMapper {
    UsuarioMapper INSTANCE = Mappers.getMapper(UsuarioMapper.class);

    UsuarioDTO usuarioToUsuarioDTO(Usuario usuario);
}

Integração com Spring Framework

MapStruct também pode ser integrado facilmente com o Spring Framework através de sua extensão, permitindo que mapeamentos de MapStruct sejam gerenciados como beans do Spring. Isso facilita a injeção de outros beans nos mappers e a utilização dos mappers em toda a aplicação Spring.

@Mapper(componentModel = "spring")
public interface UsuarioMapper {
    UsuarioMapper INSTANCE = Mappers.getMapper(UsuarioMapper.class);

    UsuarioDTO usuarioToUsuarioDTO(Usuario usuario);
}

Segurança e OWASP

Um dos riscos de segurança listados pelo OWASP é a Exposição de Dados Sensíveis. DTOs podem ajudar a resolver esse problema ao garantir que apenas os dados necessários sejam expostos nas camadas de front-end ou em APIs públicas. Ao usar DTOs, você tem controle total sobre quais dados são transferidos e expostos.

Conclusão

Utilizar MapStruct para gerenciar DTOs em aplicações Java não apenas simplifica o desenvolvimento e manutenção do código, mas também contribui para uma aplicação mais segura e eficiente. Com suas capacidades de mapeamento automático e suporte integrado para conversões complexas, MapStruct é uma ferramenta poderosa que deve ser considerada para qualquer projeto Java moderno.

// Compartilhe esse Post

💫
🔥 NOVO APP

Domine o Inglês em 30 dias!

Inteligência Artificial + Repetição Espaçada • Método cientificamente comprovado

✅ Grátis para começar 🚀 Resultados rápidos
×