Spring Boot project structure — package-by-feature, record DTOs, Flyway migrations, multi-profile config, actuator, proper test structure
84
76%
Does it follow best practices?
Impact
97%
4.04xAverage score across 5 eval scenarios
Passed
No known issues
{
"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"
}
]
}evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
skills
springboot-project-structure
verifiers