CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl-labs/springboot-project-structure

Spring Boot project structure — package-by-feature, record DTOs, Flyway migrations, multi-profile config, actuator, proper test structure

84

4.04x
Quality

76%

Does it follow best practices?

Impact

97%

4.04x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

springboot-record-dtos.jsonverifiers/

{
  "instruction": "Use Java record types for request/response DTOs and never expose JPA entities in API responses",
  "relevant_when": "Agent defines API request or response shapes in a Spring Boot application",
  "context": "Java records (Java 17+) are immutable, concise, and automatically generate equals/hashCode/toString. They are ideal for DTOs. JPA entities must never be returned directly from controllers because they contain internal fields (audit columns, lazy proxies, bidirectional references) that leak implementation details and can cause serialization issues. Use MapStruct or manual mapper classes to convert between entities and DTOs.",
  "sources": [
    {
      "type": "file",
      "filename": "skills/springboot-project-structure/SKILL.md",
      "tile": "tessl-labs/springboot-project-structure@0.2.0"
    }
  ],
  "checklist": [
    {
      "name": "record-dtos",
      "rule": "Request and response DTOs are defined as Java records, not as classes with getters/setters or Lombok @Data",
      "relevant_when": "Agent creates DTO classes in a Java 17+ Spring Boot application"
    },
    {
      "name": "entities-not-exposed",
      "rule": "Controllers return DTO records in API responses, not JPA @Entity classes directly",
      "relevant_when": "Agent creates REST endpoints that return data from the database"
    },
    {
      "name": "mapper-exists",
      "rule": "A mapper (MapStruct interface or manual mapping method) exists to convert between entities and DTOs",
      "relevant_when": "Agent creates both JPA entities and response DTOs"
    }
  ]
}

tile.json