Exception handling is vital aspect of any application or service. Exceptions should be handled properly and appropriate messages must be generated to end user or service in case of any exception. Same applies to REST services also whether they are used by some front-end application or some other service uses it to perform some operations.
It becomes tricky when we deal with REST services as we need to expose all the supported status codes for both success and error response which our service can generate, so client application or service can handle them appropriately. Below are some samples of the status code.
200 - OK (API processes the request perfectly)
404 - Not found (Request URI or resource is not available)
500 - Internal server error (Request failed due to some error at runtime at service side)
There are multiple ways to handle the exceptions which we will see in below sections.
http://localhost:8080/jaxrs/hello/error
You will get the below response and status code.
It is very easy to implement the exception handling in Spring boot using @ControllerAdvice and @ExceptionHandler annotations. By default the handlers defined in @ControllerAdvice annotated class are applied globally but we can change it to point to some specific packages using "basePackages" attribute. We can define many handler methods to handle the different exceptions using @ExceptionHandler annotation.It becomes tricky when we deal with REST services as we need to expose all the supported status codes for both success and error response which our service can generate, so client application or service can handle them appropriately. Below are some samples of the status code.
200 - OK (API processes the request perfectly)
404 - Not found (Request URI or resource is not available)
500 - Internal server error (Request failed due to some error at runtime at service side)
There are multiple ways to handle the exceptions which we will see in below sections.
Manual exception handling
We can handle the exception manually also like using try-catch combination but we need to do that at each service level. May be we will be ending up with lot of duplicate code for some common exceptions and fair chances to miss it also in some placesException handling in SpringBoot with JAX-RS Rest service
JAX-RS uses ExceptionMapper to convert the exception to response. An exception mapper class need to be created by implementing ExceptionMapper interface and override the "toResponse()" method. It also should be annotated with @Provider so JAX-RS can find it during provider scanning phase and when a particular exception is thrown at runtime, JAX-RS will convert it to HTTP response as per mapper to send it to the requester.Mapper class implementation
@Provider public class MyExceptionHandler implements ExceptionMapper<Throwable>{ @Override public Response toResponse(Throwable arg0) { return Response.status(Response.Status.BAD_REQUEST).entity(arg0.getMessage()) .build(); } }
JAX-RS integration with SpringBoot
To implement the JAX-RS services with Spring we need to register the Jersey resource configuration. below code is for achieving the same purpose with SpringBoot. In below code we have registered the package "com.example.rest" where we keeping all our jax-rs code like REST endpoint classes, Providers etc.
@Configuration public class AppConfig{ @Bean public ResourceConfig jaxrsResourceConfig(){ return new ResourceConfig().packages("com.example.rest"); } }
Service class implementation
@Path("/jaxrs") public class JaxDemoRestService { @GET @Produces(MediaType.APPLICATION_JSON) @Path("/hello/{name}") public String welcome(@PathParam("name") String name) { if("error".equalsIgnoreCase(name)) throw new RuntimeException("\"error\" can't be used as a name."); return "Hello "+name; } }Now run the application and hit below URL in browser.
http://localhost:8080/jaxrs/hello/error
You will get the below response and status code.
Status Code: 400 Response: "error" can't be used as a name.
Exception handling in SpringBoot Rest service
Controller Advice
@ControllerAdvice public class ErrorHandlerConfig { @ExceptionHandler({RuntimeException.class}) public ResponseEntity<String> handleRunTimeException(RuntimeException e) { return new ResponseEntity<>(e.getMessage(), BAD_REQUEST); } }
Service class
@RestController @RequestMapping("/rest") public class HelloService { @RequestMapping("/welcome/{name}") @GET @Produces(MediaType.APPLICATION_JSON) public String welcome(@PathVariable("name") String name) { if("error".equalsIgnoreCase(name)) throw new RuntimeException("\"error\" can't be used as a name."); return "Welcome "+name; } }
Now run the application and hit below URL in browser.
http://localhost:8080/rest/welcome/error
You will get the below response and status code.
Status Code: 400 Response: "error" can't be used as a name.
I guess I am the only one who comes here to share my very own experience guess what? I am using my laptop for almost the post 2 years.
ReplyDeleteGlobal Mapper Crack
K7 Total Security Crack
Acronis True Image Crack
Thanks for sharing this post. Your work is amazing. You can also check out vstfine Crack for Free. You can also visit the
ReplyDeleteBulk Image Downloader Crack
RoboForm Crack
K7 Total Security Crack
Panda Antivirus Pro Crack
Driver Genius Pro Crack
Traktor Pro Crack
Miracle Box Crack
Wavelab Pro Crack
Plugin Boutique Scaler Crack
GiliSoft Video Converter Crack
Knowledge Has No End Limits Keep Sharing Your Knowledge//
Such a Nice post.#Thanks For sharing this kind of information global-mapper-crack You can also visit my Website activecrack.com
ReplyDeleteA difficulty with Trial variations that expired too quickly
ReplyDeleteWondershare DVD Creator
Download Now PDF Checkpoint
Acronis True Image
Nero Burning ROM
Lightburn Crack
EaseUS Todo Backup Crack
Tally ERP 9 Crack
Your style is so unique compared to other people I have read stuff from. Many thanks forposting when you have the opportunity, Guess I will just bookmark this site K7 Total Security
ReplyDeleteI thought this was a pretty interesting read when it comes to this topic.
ReplyDeletebandicut Crack
winzip pro Crack
Advanced Driver Updater Crack
Acronis True Image Crack
Adobe Creative Cloud Crack
cracksite.net
ReplyDeleteGreat set of tips from the master himself. Excellent ideas
Scrivener Crack
Global Mapper Crack
Asphalt 9 Legends Crack
WhatsApp Plus Apk Crack
Such a Nice post. Thanks for Awesome tips Keep it up .
ReplyDeleteTraktor Pro Crack
windowsup.net
I am a professional web blogger so visit my website link is given below!To get more information
ReplyDeletePlugin Boutique Scaler v Crack/