# Profile: advice ## RestClient GET /orders/999 -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpClientErrorException$NotFound", "status": 404, "contentType": "application/problem+json", "problemDetail": { "type": "https://ankurm.com/problems/order-not-found", "title": "Order not found", "status": 404, "detail": "Order 999 does not exist", "instance": "/orders/999", "properties": { "orderId": 999 } } } ## RestClient GET /orders?limit=500 -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpClientErrorException$BadRequest", "status": 400, "contentType": "application/problem+json", "problemDetail": { "type": "null", "title": "Bad Request", "status": 400, "detail": "Validation failure", "instance": "/orders", "properties": { "errors": [ { "parameter": "limit", "detail": "must be less than or equal to 100" } ] } } } ## RestClient GET /orders/boom -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpServerErrorException$InternalServerError", "status": 500, "contentType": "application/problem+json", "problemDetail": { "type": "null", "title": "Internal Server Error", "status": 500, "detail": "An unexpected error occurred. Quote errorId when reporting it.", "instance": "/orders/boom", "properties": { "errorId": "d09000a5-d6bf-438d-a1a0-527d7cd9d6b7" } } } # Profile: defaults ## RestClient GET /orders/999 -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpServerErrorException$InternalServerError", "status": 500, "contentType": "application/json", "problemDetail": { "type": "null", "title": "Internal Server Error", "status": 500, "detail": null, "instance": "null", "properties": { "timestamp": "2026-09-11T17:05:01.408Z", "error": "Internal Server Error", "path": "/orders/999" } } } ## RestClient GET /orders?limit=500 -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpClientErrorException$BadRequest", "status": 400, "contentType": "application/json", "problemDetail": { "type": "null", "title": "Bad Request", "status": 400, "detail": null, "instance": "null", "properties": { "timestamp": "2026-09-11T17:05:01.620Z", "error": "Bad Request", "path": "/orders" } } } ## RestClient GET /orders/boom -> ex.getResponseBodyAs(ProblemDetail.class) { "exception": "org.springframework.web.client.HttpServerErrorException$InternalServerError", "status": 500, "contentType": "application/json", "problemDetail": { "type": "null", "title": "Internal Server Error", "status": 500, "detail": null, "instance": "null", "properties": { "timestamp": "2026-09-11T17:05:01.660Z", "error": "Internal Server Error", "path": "/orders/boom" } } } # ProblemDetail with one extension member, serialised three ways { "Spring Boot's JsonMapper bean": "{\"detail\":\"demo\",\"status\":409,\"title\":\"Conflict\",\"sku\":\"SKU-2\"}", "JsonMapper.builder().build()": "{\"detail\":\"demo\",\"instance\":null,\"properties\":{\"sku\":\"SKU-2\"},\"status\":409,\"title\":\"Conflict\",\"type\":null}", "new JsonMapper()": "{\"detail\":\"demo\",\"instance\":null,\"properties\":{\"sku\":\"SKU-2\"},\"status\":409,\"title\":\"Conflict\",\"type\":null}" }