Hey there, welcome back friends, let's continue. So here is the app, take a note of the URL. The app, the Store app is on the URL localhost colon 80821. And when we click on the samsung link, it simply receives the field from the Samsung app and displays it. As of now, when we click on Apple, it shows edit, we will fix this in this video here. When we navigate to this yet another app, yet another macro service.
Then here we have this localhost colon 8082 link, and that the URL mapping is slash Samsung slash devices, which displays us gives us a JSON response. Good enough nice, no problem. Whereas you also have this apple app now. So I have built this apple app, which is definitely similar to the Samsung app, I will show you in just a minute. And this also gives us a list of product, and also the brand name as Apple. So now for example, I open up.
So here we also have this option. If we click on window, we have these two apps, which are currently running Apple and Samsung, we can switch over apps. We will talk about Apple now. Let me minimize this. So this app is very simple. Let me show you.
Here we again have let me format things a little typical. Here. Again, we have this spring application dot run method, which is running the application. We have this apple resource where we are simply creating a hard coded list and returning the list of devices. Now friends, we are not worrying about connecting with the database and doing all the JDBC stuff. Those the stuff is already covered.
In this course, you can definitely create a database table, then connect this app with the database table and fetch the information. Indeed, that would be better for you as well. Try to implement the database business logic for this app, that would be a good practice for you. All right, moving forward. Again, we have this list of Apple products, which we return for slash Apple slash devices, URL mapping, very standard stuff. And in order to accommodate devices and device we have model so in device we have a vote in device we have name after product and type of the product and under devices, we simply have a list of devices.
Alright, so this is the standard stuff of which we have built. This is, in fact, a copy of Samsung application indeed, with some small little tweaks. Alright, so here we go. No provided that the Two applications are running simultaneously we have this link, we will move forward and try to fix this apple link. Alright. And we will also try to update this view this view as, like terrible, doesn't look good.
So we will fix this as well. So here we go. We open sts where we have implemented the Store app. This is just an ID, you can, again, use IntelliJ for a developing Store app again, that's up to you any ID, whatever IDE you want to use, you can use it but IntelliJ via developing microservices intelligence code. Alright, nevertheless, here we have vetted this request mapping method. What we can do, we can simply copy this and paste it in here.
And here in place of Samsung, we can type an apple. Here we go. And the name of the method would be apple. Again, name of the view would be Apple again and here we can hard code the link. Let me show you the link for Apple devices Here is the link localhost colon 8083. Apple devices.
Let me also show you I have also updated the application dot properties and given the port as 8083. So here is the what Here is the link, I can hard code the link here and paste it. Now isn't this a bad idea? Because we are in fact doing the same stuff of it minor tweaks in these two methods, it is not a very good idea, we can handle both of these things into our single method itself. That is one thing and by doing that, we can reduce the some kind of redundancy so it is always good to reduce the redundancy You may question one thing, you may question one thing that in our store app we have model, let me show you where we have device and devices. So these two methods, pardon me, these two classes, device and devices are redundant classes.
If you see device and devices right under Samsung app, let me show the Apple App, device and devices. So we have redundancy when it comes to micro services. But when it comes to micro services, it is a good idea to have redundant classes because later down the line for example, we wish to make use of different properties or limited properties we can do. So when it comes to redundancy and the microservices that is allowed, but when it comes to a tendency, within independent application, that is not a good idea. So we will reduce the redundancy of this method from here and People do something special. So, here first of all, we will receive brand name rather than Samsung directly.
So, it would be like brand name and here we are taking this as a variable right. Then here we will make use of path Param path Param is what path Param is plant name and the field will create a string object by the name of plant name again And here what we will do? We will create a switch case and the key the key would be brand name right and the first would be Samsung. Right and We will create a yet another case as of now, I am not implementing the business logic of the case I am simply creating the cases. Give me some time I have also implemented the business logic just in a minute. And in the default case in the default case, we will forward the request we will forward the request to the error page rather, it would be better good to create a jet another method for handling all the error related stuff.
So, it would be like a request mapping and mapping would be based on error. So, whenever there is any kind of error this this particular mapping will be automatically loaded but in our default, what we say in our default case we will redirect it. Nevertheless, having a error method is always a good idea. So, it would be like public return type would be model and view name would be added Here we go. And let us quickly create couple of objects. So it would be like model and view, model and view equals new model and view and view Phil give an edit page.
So it would be like error and we will simply return model and view and here the Add symbol is missing all right. So now let us quickly navigate to view and let us create the error page JSP file error dot JSP and it would be like address and message would be something went wrong. All right, this looks good. All right. And let us navigate to storage dot java file. And here we have these two cases cool enough and that there is one issue we need to also convert this value to lowercase that would be important to lowercase.
This looks good. And now let me simply copy. In fact, let me simply cut this information and paste it for Samson case. And here, as we are returning the model and view we need not to worry about breaking the case. So we will simply get rid of it. All right case Samsung model and view everything good enough that we copy the entire part.
Let me paste it for Apple two. And here we are making use of redundant name. So what we can do, we can do one small little thing we can bring these two variables or objects model and view and rest outside outside the switch and case that would be rather better, right? So it would be like let me copy this and paste it in here. And here we'll make use of model and view only This looks good. Likewise, we will do the same with the rest template.
So, we will create two references for the template and model and view and to do we have to do it for devices as well. Well we have to, so let us quickly to that as well. So it would be like this in both of the cases. Alright. So we are like removing the redundancy that is much better because here we are creating a more efficient program rather than using multiple things. All right.
Now we have these two cases. Definitely good enough. But for the default case for default, we need to redirect to this URL mapping which is slash edit, how to handle it very simple. Here we will do what we will return first of all And we will return a new object of model and view type. And we will give something special in here. Follow me redirect colon, and then we will gift you RL.
So this is the syntax, how easily we can read edit stuff. And it would be like slash errors. And we are done. And this will also fix the error. So this is the thing this is cool, this is nice. The only thing which is left is the hard coded URL.
And here we can easily make out that we were making a mistake here we need to fix this hard coded URL. So whenever we go with the hard coded URL, there could be a scope of error and it is not a good thing, but we will fix it in our next video. As of now the length of the video is pretty high so before to be able to fix it in this video, but we will fix it soon. Now friends, it seems that we Done. But we are not, for example, we try to run this application that would be an error, our application will simply crash. The reason being, we are trying to handle this error mapping and somehow we can't handle the error mapping without disabling the default is spring error handling.
So in here, in this particular application or property file, we need to add this property which is server dot error dot white label dot enabled equals false. All right, now again, let us navigate to our controller. Now since this controller has this error mapping, which is okay, but this is not okay, why because the placement of this error, but we say request mapping is not correct. why I'm saying So, because of this method in place, our application will still throw an error what is a solution? solution is rather very simple. Let me quickly navigate in here And here what we will do we will create a new controller.
So, we will add a new class. And indeed here we have given the packages a store which is okay not too very cool name for the package but All right, let's go with the same package name again, we will give the name of the class as error controller. And this will implement an interface let me add this interface and the name of the interface is error controller. Here we go. So we need to override couple of methods from here. And the method is this this this part is very important we need to return we need to return the path for the error path and the path is very simple.
We know that right? So the path is slash error. And here finally, we need to add the method Which is here, let me get rid of this method. Let me cut the information from here. And let me paste it inside this error controller. Here we go.
And here we are making use of this view file, which is okay. And indeed, there is a new model, in fact, so we can like return the string here directly, and we can like get rid of this distal line again, and we can directly return error. That would be better. This will save us one statement. All right, alright, so this, this looks good to me. And let me get rid of the unrequired imports.
And now this time around, our application should run if we haven't forgot anything. Alright, so this is running perfectly and then now we also have a custom error page. It is important to understand these small little things. These are And the greatest stuff. So in this video, we have understood two things, how to redirect using model and view and how to give a custom error page and we have modified stuff a little we have enhanced, we have enhanced our application. So now let us quickly test our application.
So here is our original application store application. Let me click on Samsung, something went wrong. So that is some kind of error. Let us check by clicking on Apple, something went wrong again. Now, there is one small little but a very good thing that our error handler our custom error handler is working perfectly, but there is some kind of issue Let me check and the issue is with this annotation path Param now friends, remember this whenever we are making use of a rest controller, use path Param whenever we are making use of controller or spring MVC use PATH variable. So, this is an important thing to remember this, this is the annotation which needs to be used whenever we are making use of what whenever we are making use of spring MVC.
Alright, so small little thing but even I forgot that small little thing but important too. All right. So let me stop the web server. Let me rerun this and it should run then. And in our next video, we will also work on the view of this, this particular output. So we will work on the view for a dis pages where we are reading the response from the microservices.
So that is coming up in our next video. All right, so this is it for today's video. I hope you guys enjoyed this video. Thanks for watching. Have a nice day and take care