{"adoption": {"forks": 174, "observed_at": "2026-08-28T04:04:08.508055+00:00", "stars": 1253}, "canonical_url": "https://ross.abutalabs.com/products/graceful-response", "card": {"archived": false, "artifact_type": "library", "description": "Spring Boot接口响应处理解决方案，提供统一返回值封装、全局异常处理、自定义异常错误码、参数校验增强、断言增强等功能", "domain": ["backend", "web-development", "apis", "developer-tools"], "enriched": true, "function": ["middleware", "error-handling", "api-framework", "internationalization"], "health_score": 36, "homepage": "https://doc.feiniaojin.com", "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["feiniaojin/graceful-response"], "name": "feiniaojin/graceful-response", "platform": ["jvm"], "pushed_at": "2025-03-28T05:05:57+00:00", "repo": "feiniaojin/graceful-response", "stars": 1253, "tags": ["spring-boot", "unified-response", "global-exception-handler", "error-codes", "restful", "parameter-validation", "assertion-enhancement", "spring"], "topics": ["api", "java", "spring-boot", "globalexceptionhandler", "restfull"], "urls": [], "use_cases": ["wrap all Spring Boot REST responses in a unified format", "handle global exceptions with consistent error codes", "assign custom error codes to parameter validation failures", "map external third-party exceptions to error codes via annotations", "return proper HTTP status codes for RESTful error responses", "define error code enums instead of many exception classes", "exclude certain endpoints from response wrapping"], "what_it_is": "Graceful Response is a Spring Boot library that elegantly handles API response processing, including unified response body wrapping, global exception handling, error code population, and exception message internationalization. It reduces boilerplate in controllers by automating response encapsulation and exception-to-response mapping.", "when_to_avoid": ["you are not using the Spring Boot stack", "your project requires fully custom per-endpoint response formats with no wrapping", "you already have a mature in-house response/exception handling framework"], "when_to_choose": ["you are building Spring Boot REST APIs and want consistent response envelopes", "you want to eliminate repetitive try-catch and response wrapping code in controllers", "you need centralized exception handling with error codes and i18n messages", "you use Spring Boot 2.x or 3.x and want drop-in response handling"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/graceful-response", "repo": "feiniaojin/graceful-response", "role": "main", "score": 29}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:08.508055+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:07:28.390118+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b20d1dd2358bed3790827886a08226849b70c78787f3cac9d39554cdcfee6243", "fetched_at": "2026-08-28T04:04:08.508055+00:00", "kind": "readme", "missing": false, "url": "https://github.com/feiniaojin/graceful-response"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 13, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1753, "days_push": 523, "days_rel": 726, "gap_med": null, "n_releases_24m": 1}, "score": 29, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}