src/main/resources/targets/claude/skills/core/dev/spring-controller/SKILL.md
Generate a Spring Boot @RestController with matching DTOs, mappers, @ControllerAdvice handler, and unit tests following hexagonal architecture.
npx skillsauth add edercnj/ia-dev-environment spring-controllerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a complete Spring Boot inbound adapter (controller) layer following the hexagonal architecture pattern established by this project. Produces:
@RestController class with CRUD or custom endpointsrecord types with @RegisterReflectionForBinding)DtoMapper)@RestControllerAdvice exception handler (or extends existing)/spring-controller <ResourceName> [--operations GET,POST,DELETE] — generate full controller for a resource/spring-controller <ResourceName> --crud — generate standard CRUD (GET list, GET by id, POST, PUT, DELETE)/spring-controller <ResourceName> --read-only — generate GET endpoints only| Parameter | Required | Description |
|-----------|----------|-------------|
| ResourceName | Yes | PascalCase resource name (e.g., Merchant, Transaction) |
| --operations | No | Comma-separated HTTP methods to generate (default: all) |
| --crud | No | Shorthand for GET list, GET by id, POST, PUT, DELETE |
| --read-only | No | Shorthand for GET list and GET by id only |
| --path | No | Override API path (default: /api/v1/{resource-name-plural}) |
| --port | No | Port interface name (default: {ResourceName}ManagementPort) |
Read existing conventions:
knowledge/stack-patterns/spring/index.md — Spring Boot patternsknowledge/layer-templates.md — Layer template patternsknowledge/architecture-hexagonal.md — Hexagonal architecture conventionssrc/main/java/**/adapter/inbound/ for naming conventionsCreate request and response records following Spring patterns:
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Request.java
@RegisterReflectionForBinding
public record {ResourceName}Request(
@NotBlank @Size(max = N) String field1,
@NotNull Type field2
) {}
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Response.java
@RegisterReflectionForBinding
public record {ResourceName}Response(Long id, String field1, Type field2) {}
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}DtoMapper.java
public final class {ResourceName}DtoMapper {
private {ResourceName}DtoMapper() {}
public static {DomainType} toDomain({ResourceName}Request request) { ... }
public static {ResourceName}Response toResponse({DomainType} domain) { ... }
}
Follow knowledge/stack-patterns/spring/index.md §4 RestController pattern:
// src/main/java/{package}/adapter/inbound/rest/{ResourceName}Controller.java
@RestController
@RequestMapping("{path}")
public class {ResourceName}Controller {
// Constructor injection of port
// Endpoints per --operations
}
Check if GlobalExceptionHandler exists in adapter/inbound/rest/:
@ExceptionHandler methods for domain exceptionsGlobalExceptionHandler following §5 pattern// src/test/java/{package}/adapter/inbound/rest/{ResourceName}ControllerTest.java
@WebMvcTest({ResourceName}Controller.class)
class {ResourceName}ControllerTest {
@Autowired MockMvc mockMvc;
@MockBean {ResourceName}ManagementPort port;
// One test per endpoint per scenario (happy path + error paths)
}
@RegisterReflectionForBinding@NotBlank, @NotNull, @Size, etc.)@Autowired on fields)@ExceptionHandler present for each domain exception typeMockMvc with @WebMvcTest (not @SpringBootTest)knowledge/stack-patterns/spring/index.md — Spring Boot patterns (§4 RestController, §5 ControllerAdvice)knowledge/layer-templates.md — Layer template patternsknowledge/architecture-hexagonal.md — Hexagonal architectureknowledge/coding-standards/coding-conventions.md — Naming conventionstesting
Scaffolds a Helidon SE/MP service with routing, health, config, Dockerfile, and tests.
tools
Generates a Picocli @Command with subcommands, options, converters, and unit tests.
testing
Scaffolds a Micronaut service with @Controller, DI, health, Dockerfile, and tests.
testing
Scaffolds a Helidon SE/MP service with routing, health, config, Dockerfile, and tests.