{"id":999,"date":"2026-03-06T01:47:30","date_gmt":"2026-03-06T04:47:30","guid":{"rendered":"https:\/\/www.isacaguiar.com.br\/blog\/?p=999"},"modified":"2026-03-22T22:34:29","modified_gmt":"2026-03-23T01:34:29","slug":"ddd-java-spring-dto-model-entity","status":"publish","type":"post","link":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/","title":{"rendered":"Domain Driven Design com Java e Spring: DTO, Model e Entity na pr\u00e1tica"},"content":{"rendered":"<p data-start=\"507\" data-end=\"604\">Domain Driven Design (DDD) com Java e Spring \u00e9 uma abordagem essencial para organizar aplica\u00e7\u00f5es complexas. Neste artigo, voc\u00ea vai aprender na pr\u00e1tica como utilizar DTO, Model e Entity para estruturar seu sistema de forma escal\u00e1vel e desacoplada.<\/p>\n<p data-start=\"606\" data-end=\"664\">Sem uma arquitetura bem definida, o resultado costuma ser:<\/p>\n<ul data-start=\"666\" data-end=\"779\">\n<li data-section-id=\"11s87x3\" data-start=\"666\" data-end=\"698\">regras de neg\u00f3cio espalhadas<\/li>\n<li data-section-id=\"uw2ohf\" data-start=\"699\" data-end=\"719\">alto acoplamento<\/li>\n<li data-section-id=\"1079wgm\" data-start=\"720\" data-end=\"749\">dificuldade de manuten\u00e7\u00e3o<\/li>\n<li data-section-id=\"1we8hyi\" data-start=\"750\" data-end=\"779\">baixa evolu\u00e7\u00e3o do sistema<\/li>\n<\/ul>\n<p data-start=\"781\" data-end=\"845\">\u00c9 nesse cen\u00e1rio que o <strong data-start=\"803\" data-end=\"833\">Domain Driven Design (DDD)<\/strong> se destaca.<\/p>\n<p data-start=\"847\" data-end=\"985\">Ao utilizar <strong data-start=\"859\" data-end=\"886\">Java 21 com Spring Boot<\/strong>, conseguimos estruturar aplica\u00e7\u00f5es onde o dom\u00ednio \u00e9 organizado e desacoplado das camadas externas.<\/p>\n<p data-start=\"987\" data-end=\"1113\">\ud83d\udca1 <strong data-start=\"990\" data-end=\"999\">Dica:<\/strong> Este artigo possui um projeto completo no GitHub com todos os exemplos implementados (link ao longo do conte\u00fado).<\/p>\n<h2 data-section-id=\"uzs1xs\" data-start=\"1120\" data-end=\"1154\">\ud83d\udce6 Projeto pr\u00e1tico deste artigo<\/h2>\n<p data-start=\"1156\" data-end=\"1249\">\ud83d\udc49 <a data-start=\"1159\" data-end=\"1249\" rel=\"noopener\" target=\"_new\" class=\"decorated-link\" href=\"https:\/\/github.com\/isacaguiar\/website-projects\/tree\/main\/ddd-java-spring-dto-model-entitiy\">https:\/\/github.com\/isacaguiar\/website-projects\/tree\/main\/ddd-java-spring-dto-model-entitiy<\/a><\/p>\n<h2 data-section-id=\"zf9f71\" data-start=\"1256\" data-end=\"1285\">O que voc\u00ea vai aprender<\/h2>\n<ul data-start=\"1287\" data-end=\"1453\">\n<li data-section-id=\"14rveu8\" data-start=\"1287\" data-end=\"1336\">Como estruturar aplica\u00e7\u00f5es com <strong data-start=\"1320\" data-end=\"1336\">DDD e Spring<\/strong><\/li>\n<li data-section-id=\"ykpe7n\" data-start=\"1337\" data-end=\"1378\">Diferen\u00e7a entre <strong data-start=\"1355\" data-end=\"1378\">DTO, Model e Entity<\/strong><\/li>\n<li data-section-id=\"bsdofg\" data-start=\"1379\" data-end=\"1418\">Como mapear objetos com <strong data-start=\"1405\" data-end=\"1418\">MapStruct<\/strong><\/li>\n<li data-section-id=\"c3m31v\" data-start=\"1419\" data-end=\"1453\">Exemplo completo com <strong data-start=\"1442\" data-end=\"1453\">Java 21<\/strong><\/li>\n<\/ul>\n<h2 data-start=\"1607\" data-end=\"1652\">O problema de arquiteturas tradicionais<\/h2>\n<p data-start=\"1654\" data-end=\"1708\">Em muitos projetos Java tradicionais vemos algo assim:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"wp-block-preformatted prism line-numbers lang-bash\" data-lang=\"JAVA\"><code class=\"language-java\">@RestController\r\npublic class ContaController {\r\n\r\n    @Autowired\r\n    ContaRepository repository;\r\n\r\n    @PostMapping\r\n    public ContaEntity criar(@RequestBody ContaEntity conta){\r\n        return repository.save(conta);\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<p data-start=\"1945\" data-end=\"1997\">Esse tipo de abordagem gera alguns problemas s\u00e9rios:<\/p>\n<p data-start=\"2001\" data-end=\"2039\">\u274c Entidade exposta na API<br data-start=\"1783\" data-end=\"1786\" \/>\u274c Dom\u00ednio inexistente<br data-start=\"1807\" data-end=\"1810\" \/>\u274c Alto acoplamento<\/p>\n<p data-start=\"2140\" data-end=\"2171\">DDD prop\u00f5e exatamente o oposto.<\/p>\n<h2 data-start=\"2178\" data-end=\"2210\">Arquitetura DDD com Java e Spring<\/h2>\n<p data-start=\"2212\" data-end=\"2273\">Uma organiza\u00e7\u00e3o comum para projetos Java com Spring pode ser:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"wp-block-preformatted prism line-numbers lang-text\" data-lang=\"text\"><code class=\"language-text\">projeto\r\n \u251c\u2500 application\r\n \u2502   \u2514\u2500 dto\r\n \u2502\r\n \u251c\u2500 domain\r\n \u2502   \u2514\u2500 model\r\n \u2502\r\n \u2514\u2500 infrastructure\r\n     \u2514\u2500 entity<\/code><\/pre>\n<\/div>\n<h3 data-start=\"2382\" data-end=\"2397\">Application<\/h3>\n<p data-start=\"2399\" data-end=\"2458\">Respons\u00e1vel pela <strong data-start=\"2416\" data-end=\"2444\">entrada e sa\u00edda de dados<\/strong> da aplica\u00e7\u00e3o.<\/p>\n<p data-start=\"2460\" data-end=\"2469\">Exemplos:<\/p>\n<ul data-start=\"2471\" data-end=\"2528\">\n<li data-start=\"2471\" data-end=\"2482\">\n<p data-start=\"2473\" data-end=\"2482\">APIs REST<\/p>\n<\/li>\n<li data-start=\"2483\" data-end=\"2495\">\n<p data-start=\"2485\" data-end=\"2495\">Mensageria<\/p>\n<\/li>\n<li data-start=\"2496\" data-end=\"2528\">\n<p data-start=\"2498\" data-end=\"2528\">integra\u00e7\u00e3o com outros servi\u00e7os<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2530\" data-end=\"2547\">Utiliza <strong data-start=\"2538\" data-end=\"2546\">DTOs<\/strong>.<\/p>\n<h3 data-start=\"2554\" data-end=\"2564\">Domain<\/h3>\n<p data-start=\"2566\" data-end=\"2602\">Aqui vivem as <strong data-start=\"2580\" data-end=\"2601\">regras de neg\u00f3cio<\/strong>.<\/p>\n<p data-start=\"2604\" data-end=\"2656\">Essa camada deve ser <strong data-start=\"2625\" data-end=\"2655\">independente de frameworks<\/strong>.<\/p>\n<p data-start=\"2658\" data-end=\"2684\">Utiliza <strong data-start=\"2666\" data-end=\"2683\">Model<\/strong>.<\/p>\n<h3 data-start=\"2691\" data-end=\"2709\">Infrastructure<\/h3>\n<p data-start=\"2711\" data-end=\"2762\">Respons\u00e1vel pela comunica\u00e7\u00e3o com recursos externos:<\/p>\n<ul data-start=\"2764\" data-end=\"2817\">\n<li data-start=\"2764\" data-end=\"2780\">\n<p data-start=\"2766\" data-end=\"2780\">banco de dados<\/p>\n<\/li>\n<li data-start=\"2781\" data-end=\"2796\">\n<p data-start=\"2783\" data-end=\"2796\">APIs externas<\/p>\n<\/li>\n<li data-start=\"2797\" data-end=\"2809\">\n<p data-start=\"2799\" data-end=\"2809\">mensageria<\/p>\n<\/li>\n<li data-start=\"2810\" data-end=\"2817\">\n<p data-start=\"2812\" data-end=\"2817\">cache<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"2819\" data-end=\"2840\">Utiliza <strong data-start=\"2827\" data-end=\"2839\">Entities<\/strong>.<\/p>\n<h2 data-start=\"2847\" data-end=\"2880\">Fluxo de dados no DDD com DTO, Model e Entity<\/h2>\n<p data-start=\"2882\" data-end=\"2934\">O fluxo t\u00edpico de dados pode ser representado assim:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-1.png\" alt=\"\" width=\"1420\" height=\"337\" class=\"size-full wp-image-1011 aligncenter\" srcset=\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-1.png 1420w, https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-1-400x95.png 400w, https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-1-1024x243.png 1024w, https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-1-768x182.png 768w\" sizes=\"auto, (max-width: 1420px) 100vw, 1420px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p data-start=\"3103\" data-end=\"3162\">Os objetos s\u00e3o convertidos entre si utilizando <strong data-start=\"3150\" data-end=\"3161\">mappers<\/strong>.<\/p>\n<hr data-start=\"3164\" data-end=\"3167\" \/>\n<h2 data-start=\"3169\" data-end=\"3201\">Modelando o dom\u00ednio do sistema<\/h2>\n<p data-start=\"3203\" data-end=\"3246\">Nosso exemplo ter\u00e1 tr\u00eas objetos principais.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-2.png\" alt=\"\" width=\"208\" height=\"673\" class=\"wp-image-1012 aligncenter\" srcset=\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-2.png 303w, https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/mermaid-diagram-2-124x400.png 124w\" sizes=\"auto, (max-width: 208px) 100vw, 208px\" \/><\/p>\n<h2 data-start=\"3445\" data-end=\"3471\">DTOs (Application Layer)<\/h2>\n<p data-start=\"3473\" data-end=\"3535\">DTOs representam os <strong data-start=\"3493\" data-end=\"3534\">dados de entrada e sa\u00edda da aplica\u00e7\u00e3o<\/strong>.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record ClientDTO(Long id, String name, String documentNumber) {\r\n}<\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record AccountDTO(Long id, ClientDTO client, List<itembuydto> items) {\r\n  public AccountDTO {\r\n    items = items == null ? List.of() : List.copyOf(items);\r\n  }\r\n}<\/itembuydto><\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record ItemBuyDTO(Long id, String description, BigDecimal value) {\r\n}<\/code><\/pre>\n<\/div>\n<p data-start=\"4333\" data-end=\"4384\">DTOs devem ser <strong data-start=\"4348\" data-end=\"4383\">simples e sem regras de neg\u00f3cio<\/strong>.<\/p>\n<h2 data-start=\"4391\" data-end=\"4421\">Models (Domain Layer)<\/h2>\n<p data-start=\"4423\" data-end=\"4474\">Representa o <strong data-start=\"2640\" data-end=\"2674\">modelo de dom\u00ednio da aplica\u00e7\u00e3o<\/strong>.<\/p>\n<p data-start=\"4476\" data-end=\"4508\">Eles costumam ser <strong data-start=\"4494\" data-end=\"4507\">imut\u00e1veis<\/strong>.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record Client(Long id, String name, String docNumber) {\r\n}<\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record Account(Long id, Client client, List<itembuy> items) {\r\n}<\/itembuy><\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>public record ItemBuy(Long id, String description, BigDecimal value) {\r\n}<\/code><\/pre>\n<\/div>\n<h2 data-start=\"5217\" data-end=\"5250\">Entities (Infrastructure Layer)<\/h2>\n<p data-start=\"5252\" data-end=\"5304\">Entities representam <strong data-start=\"5273\" data-end=\"5303\">dados persistidos no banco<\/strong>.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@Getter\r\n@Setter\r\n@Entity\r\n@NoArgsConstructor\r\npublic class ClientEntity {\r\n\r\n  @Id\r\n  @GeneratedValue(strategy = GenerationType.SEQUENCE)\r\n  @Column(nullable = false)\r\n  private Long id;\r\n\r\n  private String name;\r\n\r\n  private String docNumber;\r\n\r\n}<\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@Getter\r\n@Setter\r\n@Entity\r\npublic class AccountEntity {\r\n\r\n  @Id\r\n  @GeneratedValue(strategy = GenerationType.SEQUENCE)\r\n  @Column(nullable = false)\r\n  private Long id;\r\n\r\n  @ManyToOne\r\n  private ClientEntity client;\r\n\r\n  private List<itembuyentity> items;\r\n\r\n}<\/itembuyentity><\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@Getter\r\n@Setter\r\n@Entity\r\npublic class ItemBuyEntity {\r\n  @Id\r\n  @GeneratedValue(strategy = GenerationType.SEQUENCE)\r\n  @Column(nullable = false)\r\n  private Long id;\r\n\r\n  private String description;\r\n  private BigDecimal value;\r\n}<\/code><\/pre>\n<\/div>\n<h2 data-start=\"5685\" data-end=\"5725\">MapStruct no DDD com Java e Spring<\/h2>\n<p data-start=\"5727\" data-end=\"5829\">Para converter objetos entre camadas, podemos utilizar <strong data-start=\"5782\" data-end=\"5795\">MapStruct<\/strong>, que gera c\u00f3digo automaticamente.<\/p>\n<p data-start=\"5831\" data-end=\"5839\">Exemplo:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@Mapper(componentModel = \"spring\")\r\npublic interface ClientMapper {\r\n\r\n  @Mapping(target = \"docNumber\", source = \"documentNumber\")\r\n  Client dtoToModel(ClientDTO dto);\r\n\r\n  ClientEntity modelToEntity(Client vo);\r\n\r\n  @Mapping(target = \"documentNumber\", source = \"docNumber\")\r\n  ClientDTO modelToDto(Client vo);\r\n\r\n  Client entityToModel(ClientEntity entity);\r\n\r\n}<\/code><\/pre>\n<\/div>\n<p>A anota\u00e7\u00e3o:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@Mapping(target = \"docNumber\", source = \"documentNumber\")<\/code><\/pre>\n<\/div>\n<p>indica que:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>DTO.documentNumber -&gt; Model.docNumber<\/code><\/pre>\n<\/div>\n<p data-start=\"6152\" data-end=\"6229\">Quando os nomes dos atributos s\u00e3o iguais, n\u00e3o precisamos utilizar <code data-start=\"6218\" data-end=\"6228\">@Mapping<\/code>.<\/p>\n<p data-start=\"6231\" data-end=\"6239\">Exemplo:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>nome -&gt; nome<\/code><\/pre>\n<\/div>\n<p data-start=\"6263\" data-end=\"6309\">MapStruct faz esse mapeamento automaticamente.<\/p>\n<h2 data-start=\"6316\" data-end=\"6335\">Testando o Mapper<\/h2>\n<p data-start=\"6337\" data-end=\"6390\">Podemos validar o comportamento com testes unit\u00e1rios.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@SpringJUnitConfig(classes = {\r\n    ClientMapperImpl.class\r\n})\r\nclass ClientMapperTest {\r\n\r\n  @Autowired\r\n  private ClientMapper mapper;\r\n\r\n  @Test\r\n  void shouldConvertDtoToModel() {\r\n    ClientDTO dto = new ClientDTO(null, \"Maria\", \"12345678900\");\r\n\r\n    Client model = mapper.dtoToModel(dto);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(model.id()),\r\n        () -&gt; assertEquals(\"Maria\", model.name()),\r\n        () -&gt; assertEquals(\"12345678900\", model.docNumber())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertModelToEntity() {\r\n    Client model = new Client(null, \"Maria\", \"12345678900\");\r\n\r\n    ClientEntity entity = mapper.modelToEntity(model);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(entity.getId()),\r\n        () -&gt; assertEquals(\"Maria\", entity.getName()),\r\n        () -&gt; assertEquals(\"12345678900\", entity.getDocNumber())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertModelToDto() {\r\n    Client model = new Client(null, \"Maria\", \"12345678900\");\r\n\r\n    ClientDTO dto = mapper.modelToDto(model);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(dto.id()),\r\n        () -&gt; assertEquals(\"Maria\", dto.name()),\r\n        () -&gt; assertEquals(\"12345678900\", dto.documentNumber())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertEntityToModel() {\r\n    ClientEntity entity = new ClientEntity();\r\n    entity.setName(\"Maria\");\r\n    entity.setDocNumber(\"12345678900\");\r\n\r\n    Client model = mapper.entityToModel(entity);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(model.id()),\r\n        () -&gt; assertEquals(\"Maria\", model.name()),\r\n        () -&gt; assertEquals(\"12345678900\", model.docNumber())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenDtoIsNull() {\r\n    assertNull(mapper.dtoToModel(null));\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenModelIsNull() {\r\n    assertNull(mapper.modelToEntity(null));\r\n    assertNull(mapper.modelToDto(null));\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenEntityIsNull() {\r\n    assertNull(mapper.entityToModel(null));\r\n  }\r\n}<\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-java\" data-lang=\"Java\"><code>@SpringJUnitConfig(classes = {\r\n    AccountMapperImpl.class,\r\n    ClientMapperImpl.class\r\n})\r\nclass AccountMapperTest {\r\n\r\n  @Autowired\r\n  private AccountMapper mapper;\r\n\r\n  @Test\r\n  void shouldConvertDtoToModel() {\r\n    ClientDTO clientDTO = new ClientDTO(1L, \"Maria\", \"12345678900\");\r\n    ItemBuyDTO itemBuyDTO_1 = new ItemBuyDTO(1L, \"Produto Alfa\", new BigDecimal(\"10.00\"));\r\n    ItemBuyDTO itemBuyDTO_2 = new ItemBuyDTO(2L, \"Produto Bravo\", new BigDecimal(\"20.00\"));\r\n    AccountDTO accountDTO = new AccountDTO(1L, clientDTO, List.of(itemBuyDTO_1, itemBuyDTO_2));\r\n\r\n    Account model = mapper.dtoToModel(accountDTO);\r\n\r\n    assertAll(\r\n        () -&gt; assertEquals(1L, model.id()),\r\n        () -&gt; assertEquals(\"Maria\", model.client().name()),\r\n        () -&gt; assertEquals(\"12345678900\", model.client().docNumber()),\r\n        () -&gt; assertEquals(\"Produto Alfa\", model.items().get(0).description())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertModelToEntity() {\r\n    Client client = new Client(1L, \"Maria\", \"12345678900\");\r\n    ItemBuy itemBuy_1 = new ItemBuy(1L, \"Produto Alfa\", new BigDecimal(\"10.00\"));\r\n    ItemBuy itemBuy_2 = new ItemBuy(2L, \"Produto Bravo\", new BigDecimal(\"20.00\"));\r\n    Account account = new Account(null, client, List.of(itemBuy_1, itemBuy_2));\r\n\r\n    AccountEntity entity = mapper.modelToEntity(account);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(entity.getId()),\r\n        () -&gt; assertEquals(2, entity.getItems().size())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertModelToDto() {\r\n    Client client = new Client(1L, \"Maria\", \"12345678900\");\r\n    ItemBuy itemBuy_1 = new ItemBuy(1L, \"Produto Alfa\", new BigDecimal(\"10.00\"));\r\n    ItemBuy itemBuy_2 = new ItemBuy(2L, \"Produto Bravo\", new BigDecimal(\"20.00\"));\r\n    Account account = new Account(null, client, List.of(itemBuy_1, itemBuy_2));\r\n\r\n    AccountDTO dto = mapper.modelToDto(account);\r\n\r\n    assertAll(\r\n        () -&gt; assertNull(dto.id()),\r\n        () -&gt; assertEquals(\"Maria\", dto.client().name()),\r\n        () -&gt; assertEquals(\"12345678900\", dto.client().documentNumber()),\r\n        () -&gt; assertEquals(2, dto.items().size())\r\n\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldConvertEntityToModel() {\r\n    ClientEntity clientEntity = new ClientEntity();\r\n    clientEntity.setId(1L);\r\n    clientEntity.setName(\"Maria\");\r\n    clientEntity.setDocNumber(\"12345678900\");\r\n\r\n    ItemBuyEntity itemBuy_1 = new ItemBuyEntity();\r\n    itemBuy_1.setId(1L);\r\n    itemBuy_1.setDescription(\"Produto Alfa\");\r\n    itemBuy_1.setValue(new BigDecimal(\"10.00\"));\r\n    ItemBuyEntity itemBuy_2 = new ItemBuyEntity();\r\n    itemBuy_2.setId(2L);\r\n    itemBuy_2.setDescription(\"Produto Bravo\");\r\n    itemBuy_2.setValue(new BigDecimal(\"20.00\"));\r\n\r\n    AccountEntity entity = new AccountEntity();\r\n    entity.setId(1L);\r\n    entity.setClient(clientEntity);\r\n    entity.setItems(List.of(itemBuy_1, itemBuy_2));\r\n\r\n    Account model = mapper.entityToModel(entity);\r\n\r\n    assertAll(\r\n        () -&gt; assertEquals(1L, model.id()),\r\n        () -&gt; assertEquals(\"Maria\", model.client().name()),\r\n        () -&gt; assertEquals(\"12345678900\", model.client().docNumber()),\r\n        () -&gt; assertEquals(2, model.items().size())\r\n    );\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenDtoIsNull() {\r\n    assertNull(mapper.dtoToModel(null));\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenModelIsNull() {\r\n    assertNull(mapper.modelToEntity(null));\r\n    assertNull(mapper.modelToDto(null));\r\n  }\r\n\r\n  @Test\r\n  void shouldReturnNullWhenEntityIsNull() {\r\n    assertNull(mapper.entityToModel(null));\r\n  }\r\n\r\n\r\n}<\/code><\/pre>\n<\/div>\n<h2 data-start=\"6829\" data-end=\"6855\">MapStruct vs ModelMapper<\/h2>\n<p data-start=\"6857\" data-end=\"6917\">Uma d\u00favida comum \u00e9 qual biblioteca utilizar para mapeamento.<\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex flex-col-reverse w-fit\" tabindex=\"-1\">\n<table data-start=\"6919\" data-end=\"7158\" class=\"w-fit min-w-(--thread-content-width)\">\n<thead data-start=\"6919\" data-end=\"6963\">\n<tr data-start=\"6919\" data-end=\"6963\">\n<th data-start=\"6919\" data-end=\"6936\" data-col-size=\"sm\" class=\"\">Caracter\u00edstica<\/th>\n<th data-start=\"6936\" data-end=\"6948\" data-col-size=\"sm\" class=\"\">MapStruct<\/th>\n<th data-start=\"6948\" data-end=\"6963\" data-col-size=\"sm\" class=\"\">ModelMapper<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"6978\" data-end=\"7158\">\n<tr data-start=\"6978\" data-end=\"7024\">\n<td data-start=\"6978\" data-end=\"6998\" data-col-size=\"sm\">Gera\u00e7\u00e3o de c\u00f3digo<\/td>\n<td data-start=\"6998\" data-end=\"7013\" data-col-size=\"sm\">Compile time<\/td>\n<td data-start=\"7013\" data-end=\"7024\" data-col-size=\"sm\">Runtime<\/td>\n<\/tr>\n<tr data-start=\"7025\" data-end=\"7061\">\n<td data-start=\"7025\" data-end=\"7039\" data-col-size=\"sm\">Performance<\/td>\n<td data-start=\"7039\" data-end=\"7052\" data-col-size=\"sm\">Muito alta<\/td>\n<td data-start=\"7052\" data-end=\"7061\" data-col-size=\"sm\">M\u00e9dia<\/td>\n<\/tr>\n<tr data-start=\"7062\" data-end=\"7099\">\n<td data-start=\"7062\" data-end=\"7083\" data-col-size=\"sm\">Seguran\u00e7a de tipos<\/td>\n<td data-start=\"7083\" data-end=\"7090\" data-col-size=\"sm\">Alta<\/td>\n<td data-start=\"7090\" data-end=\"7099\" data-col-size=\"sm\">M\u00e9dia<\/td>\n<\/tr>\n<tr data-start=\"7100\" data-end=\"7158\">\n<td data-start=\"7100\" data-end=\"7129\" data-col-size=\"sm\">Uso em projetos enterprise<\/td>\n<td data-start=\"7129\" data-end=\"7143\" data-col-size=\"sm\">Muito comum<\/td>\n<td data-start=\"7143\" data-end=\"7158\" data-col-size=\"sm\">Menos comum<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p data-start=\"7160\" data-end=\"7290\">Por gerar c\u00f3digo <strong data-start=\"7177\" data-end=\"7203\">em tempo de compila\u00e7\u00e3o<\/strong>, MapStruct costuma ser a escolha preferida em sistemas <strong data-start=\"7259\" data-end=\"7289\">Spring Boot de alta escala<\/strong>.<\/p>\n<h2 data-start=\"7297\" data-end=\"7332\">Erros comuns ao usar DTO e Entity<\/h2>\n<p data-start=\"7334\" data-end=\"7377\">Alguns erros muito comuns em projetos Java:<\/p>\n<h3 data-start=\"7379\" data-end=\"7401\">Usar Entity na API<\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-js\" data-lang=\"JavaScript\"><code>@PostMapping\r\npublic ClienteEntity criar(@RequestBody ClienteEntity cliente)<\/code><\/pre>\n<\/div>\n<p data-start=\"7492\" data-end=\"7532\">Isso exp\u00f5e o <strong data-start=\"7505\" data-end=\"7531\">modelo de banco na API<\/strong>.<\/p>\n<h3 data-start=\"7539\" data-end=\"7567\">Regras de neg\u00f3cio em DTO<\/h3>\n<p data-start=\"7569\" data-end=\"7626\">DTOs devem ser <strong data-start=\"7584\" data-end=\"7609\">objetos de transporte<\/strong>, n\u00e3o de neg\u00f3cio.<\/p>\n<h3 data-start=\"7633\" data-end=\"7654\">Ignorar o dom\u00ednio<\/h3>\n<p data-start=\"7656\" data-end=\"7725\">Colocar toda a l\u00f3gica em <strong data-start=\"7681\" data-end=\"7708\">services ou controllers<\/strong> \u00e9 um erro comum.<\/p>\n<p data-start=\"7727\" data-end=\"7775\">DDD coloca o <strong data-start=\"7740\" data-end=\"7774\">dom\u00ednio no centro da aplica\u00e7\u00e3o<\/strong>.<\/p>\n<h2 data-start=\"7782\" data-end=\"7810\">Benef\u00edcios dessa abordagem<\/h2>\n<p data-start=\"7812\" data-end=\"7862\">Utilizar DTO, VO e Entity traz diversas vantagens:<\/p>\n<p data-start=\"7864\" data-end=\"8013\">\u2714 separa\u00e7\u00e3o clara de responsabilidades<br data-start=\"7902\" data-end=\"7905\" \/>\u2714 dom\u00ednio independente de frameworks<br data-start=\"7941\" data-end=\"7944\" \/>\u2714 c\u00f3digo mais test\u00e1vel<br data-start=\"7966\" data-end=\"7969\" \/>\u2714 melhor manuten\u00e7\u00e3o<br data-start=\"7988\" data-end=\"7991\" \/>\u2714 maior escalabilidade<\/p>\n<h2 data-start=\"8020\" data-end=\"8031\">Conclus\u00e3o<\/h2>\n<p data-start=\"8033\" data-end=\"8113\">Domain Driven Design \u00e9 uma abordagem poderosa para organizar sistemas complexos.<\/p>\n<p data-start=\"8115\" data-end=\"8166\">Ao utilizar <strong data-start=\"8127\" data-end=\"8146\">Java com Spring<\/strong>, a separa\u00e7\u00e3o entre:<\/p>\n<ul data-start=\"8168\" data-end=\"8201\">\n<li data-start=\"8168\" data-end=\"8174\">\n<p data-start=\"8170\" data-end=\"8174\">DTOs<\/p>\n<\/li>\n<li data-start=\"8175\" data-end=\"8190\">\n<p data-start=\"8177\" data-end=\"8190\">Model<\/p>\n<\/li>\n<li data-start=\"8191\" data-end=\"8201\">\n<p data-start=\"8193\" data-end=\"8201\">Entities<\/p>\n<\/li>\n<\/ul>\n<p data-start=\"8203\" data-end=\"8311\">permite manter o <strong data-start=\"8220\" data-end=\"8241\">dom\u00ednio protegido<\/strong>, melhorar a manuten\u00e7\u00e3o do c\u00f3digo e facilitar a evolu\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n<p data-start=\"8313\" data-end=\"8435\">Com ferramentas como <strong data-start=\"8334\" data-end=\"8347\">MapStruct<\/strong>, tamb\u00e9m conseguimos simplificar o mapeamento entre camadas e reduzir c\u00f3digo repetitivo.<\/p>\n<p>Entenda tamb\u00e9m <a href=\"\/blog\/clean-architecture-com-spring-boot-guia-completo-com-exemplo-pratico\">Clean Architecture com Spring Boot<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Domain Driven Design (DDD) com Java e Spring \u00e9 uma abordagem essencial para organizar aplica\u00e7\u00f5es complexas. Neste artigo, voc\u00ea vai aprender na\u2026<\/p>\n","protected":false},"author":1,"featured_media":1005,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,13,289],"tags":[],"class_list":["post-999","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento-de-software","category-java","category-tecnologia"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica<\/title>\n<meta name=\"description\" content=\"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica\" \/>\n<meta property=\"og:description\" content=\"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog do Aguiar\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/isac.velozo.aguiar\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-06T04:47:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-23T01:34:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"isacaguiar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"isacaguiar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\"},\"author\":{\"name\":\"isacaguiar\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\"},\"headline\":\"Domain Driven Design com Java e Spring: DTO, Model e Entity na pr\u00e1tica\",\"datePublished\":\"2026-03-06T04:47:30+00:00\",\"dateModified\":\"2026-03-23T01:34:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\"},\"wordCount\":673,\"image\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png\",\"articleSection\":[\"Desenvolvimento de Software\",\"Java\",\"Tecnologia\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\",\"name\":\"DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica\",\"isPartOf\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png\",\"datePublished\":\"2026-03-06T04:47:30+00:00\",\"dateModified\":\"2026-03-23T01:34:29+00:00\",\"author\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\"},\"description\":\"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png\",\"contentUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"http:\/\/www.isacaguiar.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Domain Driven Design com Java e Spring: DTO, Model e Entity na pr\u00e1tica\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#website\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/\",\"name\":\"Blog do Aguiar\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.isacaguiar.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\",\"name\":\"isacaguiar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"caption\":\"isacaguiar\"},\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/author\/isacaguiar\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica","description":"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/","og_locale":"pt_BR","og_type":"article","og_title":"DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica","og_description":"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.","og_url":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/","og_site_name":"Blog do Aguiar","article_publisher":"https:\/\/www.facebook.com\/isac.velozo.aguiar","article_published_time":"2026-03-06T04:47:30+00:00","article_modified_time":"2026-03-23T01:34:29+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd-1024x683.png","type":"image\/png"}],"author":"isacaguiar","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"isacaguiar","Est. tempo de leitura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#article","isPartOf":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/"},"author":{"name":"isacaguiar","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d"},"headline":"Domain Driven Design com Java e Spring: DTO, Model e Entity na pr\u00e1tica","datePublished":"2026-03-06T04:47:30+00:00","dateModified":"2026-03-23T01:34:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/"},"wordCount":673,"image":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png","articleSection":["Desenvolvimento de Software","Java","Tecnologia"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/","url":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/","name":"DDD com Java e Spring: DTO, Model e Entity na pr\u00e1tica","isPartOf":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage"},"image":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage"},"thumbnailUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png","datePublished":"2026-03-06T04:47:30+00:00","dateModified":"2026-03-23T01:34:29+00:00","author":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d"},"description":"Aprenda DDD com Java e Spring usando DTO, Model e Entity. Veja exemplos pr\u00e1ticos com MapStruct e arquitetura em camadas.","breadcrumb":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#primaryimage","url":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png","contentUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2026\/03\/beef4f8e-730b-47f8-8cc3-2eb1de78c6cd.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.isacaguiar.com.br\/blog\/ddd-java-spring-dto-model-entity\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"http:\/\/www.isacaguiar.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Domain Driven Design com Java e Spring: DTO, Model e Entity na pr\u00e1tica"}]},{"@type":"WebSite","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#website","url":"https:\/\/www.isacaguiar.com.br\/blog\/","name":"Blog do Aguiar","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.isacaguiar.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d","name":"isacaguiar","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","caption":"isacaguiar"},"url":"https:\/\/www.isacaguiar.com.br\/blog\/author\/isacaguiar\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/999","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/comments?post=999"}],"version-history":[{"count":10,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/999\/revisions"}],"predecessor-version":[{"id":1020,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/999\/revisions\/1020"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/media\/1005"}],"wp:attachment":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/media?parent=999"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/categories?post=999"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/tags?post=999"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}