Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates Spring Boot 3.x configurations, creates REST controllers, implements Spring Security 6 authentication flows, sets up Spring Data JPA repositories, and configures reactive WebFlux endpoints. Use when building Spring Boot 3.x applications, microservices, or reactive Java applications; invoke for Spring Data JPA, Spring Security 6, WebFlux, Spring Cloud integration, Java REST API design, or Microservices Java architecture.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 355% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 248% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 104% | 0% |
./mvnw test (or ./gradlew test) and confirm all pass before proceeding. If tests fail: review the stack trace, isolate the failing assertion or component, fix the issue, and re-run the full suite/actuator/health returns UP. If health is DOWN: check the components detail in the response, resolve the failing component (e.g., datasource, broker), and re-validateLoad detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Web Layer | references/web.md | Controllers, REST APIs, validation, exception handling | | Data Access | references/data.md | Spring Data JPA, repositories, transactions, projections | | Security | references/security.md | Spring Security 6, OAuth2, JWT, method security | | Cloud Native | references/cloud.md | Spring Cloud, Config, Discovery, Gateway, resilience | | Testing | references/testing.md | @SpringBootTest, MockMvc, Testcontainers, test slices |
A standard Spring Boot feature consists of these layers. Use these as copy-paste starting points.
java@Entity @Table(name = "products") public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotBlank private String name; @DecimalMin("0.0") private BigDecimal price; // getters / setters or use @Data (Lombok) }
javapublic interface ProductRepository extends JpaRepository<Product, Long> { List<Product> findByNameContainingIgnoreCase(String name); }
java@Service public class ProductService { private final ProductRepository repo; public ProductService(ProductRepository repo) { // constructor injection — no @Autowired this.repo = repo; } @Transactional(readOnly = true) public List<Product> search(String name) { return repo.findByNameContainingIgnoreCase(name); } @Transactional public Product create(ProductRequest request) { var product = new Product(); product.setName(request.name()); product.setPrice(request.price()); return repo.save(product); } }
java@RestController @RequestMapping("/api/v1/products") @Validated public class ProductController { private final ProductService service; public ProductController(ProductService service) { this.service = service; } @GetMapping public List<Product> search(@RequestParam(defaultValue = "") String name) { return service.search(name); } @PostMapping @ResponseStatus(HttpStatus.CREATED) public Product create(@Valid @RequestBody ProductRequest request) { return service.create(request); } }
javapublic record ProductRequest( @NotBlank String name, @DecimalMin("0.0") BigDecimal price ) {}
java@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public Map<String, String> handleValidation(MethodArgumentNotValidException ex) { return ex.getBindingResult().getFieldErrors().stream() .collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage)); } @ExceptionHandler(EntityNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public Map<String, String> handleNotFound(EntityNotFoundException ex) { return Map.of("error", ex.getMessage()); } }
java@WebMvcTest(ProductController.class) class ProductControllerTest { @Autowired MockMvc mockMvc; @MockBean ProductService service; @Test void createProduct_validRequest_returns201() throws Exception { var product = new Product(); product.setName("Widget"); product.setPrice(BigDecimal.TEN); when(service.create(any())).thenReturn(product); mockMvc.perform(post("/api/v1/products") .contentType(MediaType.APPLICATION_JSON) .content("""{"name":"Widget","price":10.0}""")) .andExpect(status().isCreated()) .andExpect(jsonPath("$.name").value("Widget")); } }
| Rule | Correct Pattern | |------|----------------| | Constructor injection | public MyService(Dep dep) { this.dep = dep; } | | Validate API input | @Valid @RequestBody MyRequest req on every mutating endpoint | | Type-safe config | @ConfigurationProperties(prefix = "app") bound to a record/class | | Appropriate stereotype | @Service for business logic, @Repository for data, @RestController for HTTP | | Transaction scope | @Transactional on multi-step writes; @Transactional(readOnly = true) on reads | | Hide internals | Catch domain exceptions in @RestControllerAdvice; return problem details, not stack traces | | Externalize secrets | Use environment variables or Spring Cloud Config — never application.properties |
@Autowired on fields)@Component when @Service/@Repository/@Controller applies.block() inside a WebFlux chain)application.properties/application.ymlWebSecurityConfigurerAdapter)Other measured skills in the registry, with their headline benchmark lift.