📄️ 3.3.30. Logging / Debugging
REST request/response debug capture is driven by a single signal: the resource's own java.util.logging.Logger
📄️ 3.3.31. HTTP Status Codes
By default, a 200 (OK) status is automatically set as the HTTP status when a Java method executes successfully.
📄️ 3.3.32. RFC 7807 / 9457 Problem Details
Juneau REST servers can emit machine-readable RFC 7807 — Problem Details for HTTP APIs responses (application/problem+json) end-to-end. The feature couples three pieces:
📄️ 3.3.33. Conditional-GET / ETag Helpers
Juneau REST servers ship a minimal but complete RFC 7232 — Conditional Requests helper layer so handlers no longer need to hand-roll ETag / Last-Modified / If-None-Match / If-Match plumbing. The feature couples three pieces:
📄️ 3.3.34. Rate-Limiting and Request-Id Propagation
Juneau REST servers ship two small, opt-in primitives for operational hardening:
📄️ 3.3.35. Client Versioning
Client version headers let one REST resource return different responses depending on which version of a client is calling, so you can make breaking interface changes without breaking older clients.
📄️ 3.3.36. Jakarta Bean Validation
Validation is opt-in and disabled by default. To enable, mark a @Content, @FormData, or @Request-bound parameter with @jakarta.validation.Valid. With no marker anywhere on a resource, validation never runs — no Validator is instantiated, no constraint check is invoked, and no per-request cost is paid, even when jakarta.validation-api and a concrete provider (e.g. Hibernate Validator) are sitting on the classpath.
📄️ 3.3.37. Test-time Bean Injection
The juneau-bct module provides a small JUnit 5 extension for swapping production beans with test doubles (mocks/fakes) inside a Juneau BeanStore for the duration of a JUnit 5 test — without modifying production code and without proxying. It's the Juneau-flavored answer to Spring's @TestConfiguration / @MockBean.