{"id":196,"date":"2024-02-03T21:40:04","date_gmt":"2024-02-03T20:40:04","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=196"},"modified":"2024-02-13T21:40:29","modified_gmt":"2024-02-13T20:40:29","slug":"die-responsestatus-annotation-in-spring-webanwendungen","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=196","title":{"rendered":"Die @ResponseStatus-Annotation in Spring-Webanwendungen"},"content":{"rendered":"\n<p>Spring, das weit verbreitete Java-Framework, bietet zahlreiche Funktionen, um die Entwicklung von Enterprise-Anwendungen zu erleichtern. Eine dieser Funktionen ist die <code>@ResponseStatus<\/code>-Annotation, die es Entwicklern erm\u00f6glicht, den HTTP-Statuscode und die Grundbeschreibung einer HTTP-Antwort anzugeben. Diese Annotation spielt eine wichtige Rolle bei der Handhabung von Ausnahmen in Spring-basierten Anwendungen und erm\u00f6glicht eine pr\u00e4zise Kontrolle \u00fcber das Verhalten des HTTP-Servers. In diesem Artikel werden wir die <code>@ResponseStatus<\/code>-Annotation genauer betrachten und ihre Verwendung in Spring-Anwendungen erl\u00e4utern.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Einf\u00fchrung in die @ResponseStatus-Annotation<\/h2>\n\n\n\n<p>Die <code>@ResponseStatus<\/code>-Annotation ist ein Bestandteil des Spring Frameworks und wird dazu verwendet, den HTTP-Statuscode und optional eine Grundbeschreibung f\u00fcr die HTTP-Antwort anzugeben, die von einer bestimmten Methode oder Ausnahme zur\u00fcckgegeben wird. Diese Annotation kann auf Methoden in Controllern oder auf Ausnahmen angewendet werden, um das gew\u00fcnschte Verhalten des HTTP-Servers zu steuern.<\/p>\n\n\n\n<p>Die grundlegende Syntax der <code>@ResponseStatus<\/code>-Annotation sieht folgenderma\u00dfen aus:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-keyword\">@ResponseStatus<\/span>(value = HttpStatus.XXX, reason = <span class=\"hljs-string\">\"Optional reason message\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Hier steht <code>HttpStatus.XXX<\/code> f\u00fcr den gew\u00fcnschten HTTP-Statuscode, und die <code>reason<\/code>-Eigenschaft erm\u00f6glicht die Angabe einer optionalen Beschreibung f\u00fcr die HTTP-Antwort. Diese Annotation kann sowohl auf Methoden als auch auf Ausnahmen angewendet werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung in Controller-Methoden<\/h2>\n\n\n\n<p>In Spring MVC-Controllern wird die <code>@ResponseStatus<\/code>-Annotation h\u00e4ufig verwendet, um den HTTP-Statuscode und die Antwortbeschreibung f\u00fcr eine bestimmte Anfrage-Methode festzulegen. Dies ist besonders n\u00fctzlich, wenn eine Methode eine spezifische Ausnahme ausl\u00f6st und Sie den Standard-HTTP-Statuscode \u00e4ndern m\u00f6chten.<\/p>\n\n\n\n<p>Betrachten wir ein einfaches Beispiel. Angenommen, wir haben einen Controller, der eine Ressource nach ID abruft. Wenn die Ressource nicht gefunden wird, k\u00f6nnte die Methode standardm\u00e4\u00dfig einen HTTP-Statuscode 404 zur\u00fcckgeben. Mit der <code>@ResponseStatus<\/code>-Annotation k\u00f6nnen wir dies wie folgt \u00e4ndern:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@RestController\n@RequestMapping(<span class=\"hljs-string\">\"\/api\/resource\"<\/span>)\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ResourceController<\/span> <\/span>{\n\n    @GetMapping(<span class=\"hljs-string\">\"\/{id}\"<\/span>)\n    @ResponseStatus(HttpStatus.OK)\n    <span class=\"hljs-keyword\">public<\/span> ResponseEntity&lt;Resource&gt; getResourceById(@PathVariable Long id) {\n        <span class=\"hljs-comment\">\/\/ Logik zum Abrufen der Ressource nach ID<\/span>\n        <span class=\"hljs-comment\">\/\/ ...<\/span>\n\n        <span class=\"hljs-comment\">\/\/ Wenn Ressource nicht gefunden<\/span>\n        <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> ResourceNotFoundException(<span class=\"hljs-string\">\"Resource with ID \"<\/span> + id + <span class=\"hljs-string\">\" not found\"<\/span>);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird der HTTP-Statuscode auf 200 (OK) festgelegt, wenn die Methode erfolgreich ausgef\u00fchrt wird. Wenn jedoch die Ausnahme <code>ResourceNotFoundException<\/code> ausgel\u00f6st wird (beispielsweise, wenn die Ressource nicht gefunden wird), wird der HTTP-Statuscode auf 404 (Not Found) ge\u00e4ndert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendung auf benutzerdefinierte Ausnahmen<\/h2>\n\n\n\n<p>Die <code>@ResponseStatus<\/code>-Annotation kann auch auf benutzerdefinierte Ausnahmen angewendet werden, um den Standard-HTTP-Statuscode und die Antwortbeschreibung zu \u00e4ndern. Dies ist besonders hilfreich, um klare und konsistente HTTP-Antworten in der Anwendung zu gew\u00e4hrleisten.<\/p>\n\n\n\n<p>Betrachten wir ein Beispiel, in dem eine benutzerdefinierte Ausnahme <code>CustomException<\/code> erstellt wird:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@ResponseStatus(HttpStatus.BAD_REQUEST)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">CustomException<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">RuntimeException<\/span> <\/span>{\n\n    public CustomException(<span class=\"hljs-built_in\">String<\/span> message) {\n        <span class=\"hljs-keyword\">super<\/span>(message);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>@ResponseStatus<\/code>-Annotation direkt auf die benutzerdefinierte Ausnahme angewendet. Dadurch wird der HTTP-Statuscode auf 400 (Bad Request) festgelegt. Wenn diese Ausnahme in einer Methode ausgel\u00f6st wird, die von einem Spring MVC-Controller aufgerufen wird, wird die Antwort des Servers den festgelegten HTTP-Statuscode haben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Globale Ausnahmenbehandlung<\/h2>\n\n\n\n<p>Die <code>@ResponseStatus<\/code>-Annotation kann auch im Rahmen der globalen Ausnahmenbehandlung in Spring verwendet werden. Dies erm\u00f6glicht es, f\u00fcr bestimmte Ausnahmen oder Ausnahme-Typen einen globalen HTTP-Statuscode festzulegen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-keyword\">@ControllerAdvice<\/span>\npublic class GlobalExceptionHandler {\n\n    <span class=\"hljs-keyword\">@ExceptionHandler<\/span>(CustomException.class)\n    @ResponseStatus(HttpStatus.BAD_REQUEST)\n    public ResponseEntity&lt;String&gt; handleCustomException(CustomException ex) {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">new<\/span> <span class=\"hljs-selector-tag\">ResponseEntity<\/span>&lt;&gt;(<span class=\"hljs-selector-tag\">ex<\/span><span class=\"hljs-selector-class\">.getMessage<\/span>(), <span class=\"hljs-selector-tag\">HttpStatus<\/span><span class=\"hljs-selector-class\">.BAD_REQUEST<\/span>);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>@ExceptionHandler<\/code>-Annotation in Verbindung mit <code>@ResponseStatus<\/code> verwendet, um den HTTP-Statuscode f\u00fcr die <code>CustomException<\/code> festzulegen. Dies erm\u00f6glicht eine konsistente Behandlung dieser Ausnahme in der gesamten Anwendung.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendung der reason-Eigenschaft<\/h2>\n\n\n\n<p>Die <code>reason<\/code>-Eigenschaft der <code>@ResponseStatus<\/code>-Annotation erm\u00f6glicht es, eine optionale Beschreibung f\u00fcr die HTTP-Antwort anzugeben. Diese Beschreibung kann n\u00fctzlich sein, um zus\u00e4tzliche Informationen \u00fcber den Grund des zur\u00fcckgegebenen Statuscodes bereitzustellen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = <span class=\"hljs-string\">\"Resource not found\"<\/span>)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ResourceNotFoundException<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">RuntimeException<\/span> <\/span>{\n\n    public ResourceNotFoundException(<span class=\"hljs-built_in\">String<\/span> message) {\n        <span class=\"hljs-keyword\">super<\/span>(message);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>reason<\/code>-Eigenschaft verwendet, um eine klare und verst\u00e4ndliche Nachricht anzugeben, wenn die Ausnahme <code>ResourceNotFoundException<\/code> ausgel\u00f6st wird. Dies erleichtert die Fehlersuche und verbessert die Benutzerfreundlichkeit der API.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Die <code>@ResponseStatus<\/code>-Annotation in Spring bietet Entwicklern eine einfache M\u00f6glichkeit, den HTTP-Statuscode und die Antwortbeschreibung f\u00fcr Controller-Methoden oder Ausnahmen festzulegen. Durch die gezielte Steuerung der HTTP-Antworten k\u00f6nnen klare und konsistente API-Schnittstellen erstellt werden. Es ist wichtig, diese Annotation sorgf\u00e4ltig und konsistent zu verwenden, um die Lesbarkeit des Codes zu verbessern und die Benutzerfreundlichkeit der Anwendung zu erh\u00f6hen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Spring, das weit verbreitete Java-Framework, bietet zahlreiche Funktionen, um die Entwicklung von Enterprise-Anwendungen zu erleichtern. Eine dieser Funktionen ist die @ResponseStatus-Annotation, die es Entwicklern erm\u00f6glicht, den HTTP-Statuscode und die Grundbeschreibung einer HTTP-Antwort anzugeben. Diese Annotation spielt eine wichtige Rolle bei der Handhabung von Ausnahmen in Spring-basierten Anwendungen und erm\u00f6glicht eine pr\u00e4zise Kontrolle \u00fcber das Verhalten [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-196","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=196"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/196\/revisions\/197"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}