archbase-identifier
Módulo para identificação de entidades com anotação e serialização otimizada.
Instalação
<dependency>
<groupId>br.com.archbase</groupId>
<artifactId>archbase-identifier</artifactId>
<version>${archbase.version}</version>
</dependency>
Configuração
archbase:
identifier:
enabled: false # Desabilitado por padrão
@ArchbaseIdentifier
Anotação para marcar campos que representam identificadores de entidades:
@Entity
@DomainEntity
public class Cliente extends PersistenceEntityBase<Cliente, UUID> {
@ArchbaseIdentifier
private UUID id;
private String nome;
}
Interface Identifier
Interface marcadora para identificadores customizados:
public class ClienteId implements Identifier<UUID> {
private final UUID value;
public ClienteId(UUID value) {
this.value = Objects.requireNonNull(value);
}
@Override
public UUID getValue() {
return value;
}
}
Serialização Jackson
Com o módulo habilitado, identificadores são serializados como o valor direto:
// Sem módulo: {"id": {"value": "123e4567-e89b-12d3-a456-426614174000"}}
// Com módulo: {"id": "123e4567-e89b-12d3-a456-426614174000"}
Uso Manual
Para registrar manualmente o módulo Jackson:
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new IdentifierModule());
return mapper;
}
}
Exemplos
Identificador UUID
public class PedidoId implements Identifier<UUID> {
private final UUID value;
public PedidoId() {
this(UUID.randomUUID());
}
public UUID getValue() {
return value;
}
}
Identificador String
public class Cnpj implements Identifier<String> {
private final String value;
public Cnpj(String value) {
this.value = Objects.requireNonNull(value);
}
@Override
public String getValue() {
return value;
}
}
Próximos Passos
- archbase-jackson - Serialização de Value Objects
- archbase-domain-driven-design - Entidades e Agregados