Now that we have got a tool like postman, let's add more functionalities. For example, instead of getting all the customers or have a particular page, whatever, I'm looking for a customer by a ID. So for example, I can say customers slash 66, where I want to say that give me a customer whose ID is 66. without mentioning the world ID, so we are not sending a query string parameter like question mark, ID equals 266. But we are saying here that slash 66. So we want to assume that this 66 here is a variable called ID. So let's go and add one additional function.
This time I want to say public customer because I want to return a single customer. Let's call it as get customer. By ID. We want an integer ID. And then I can simply say return report dot four By ID of ID, this is that the return type is not a customer, but something called optional. And all I have to do is to say dot get, and I get an actual customer object based on this ID.
The question is, how do I map this because slash API slash customers cannot be mapped to two functions, we have to have some kind of difference. So we are going to say at the rate get mapping. But this time, it is for something with parameters. So the curly bracket here is to say that this is a placeholder. And whatever is given over there is now recognized as ID. So it's going to be like slash API slash customers slash 66.
And that 66 is now identifiable by using the word ID. And now we want to say that whatever is there in the ID should be given to this. Now previously, you saw we said it's a request parameter. But this time it's not a request parameter. It's called as PATH variable. To simply add here at the rate PATH variable, and that should be good.
Now, in case if the value that you're given your ID is different than the name of the variable, then it won't happen. So all you have to do in that case is to say that this is ID, since in my case, the parameter ID here is same as the variable name. This part is optional. So let me get rid of that. So I'm going to save it. And now if I go back to postman, and then send this request, I should be able to get single customer data.
So let me check it out by typing a different ID. Let's say for example, for if I send it and we do get a different object. Now what if I type here 4500, where I don't have the corresponding data. Now, what happens is that you simply get an exception. So it says your 500 internal server error, and that's because there is a no value present and does exception was actually created by a Spring and Hibernate combination. Now, if you don't want this exception, and if you don't want this to be reported as internal server error, because it's just that we don't have a value for this ID, it's still a proper response from the server.
But I don't have a response content. If you want to do anything different than what we can do here is to surround this with a try catch, block, and then return a customer if it is found, but return a null value or a blank if there is no customer. So the first thing I'm going to do is to change the data type here to something called response entity off. I'll put a question mark, question mark is being very generic. We say that we want to send some response, but we don't know what is the data type, because it can be a customer it can be a non value as well. So the number one thing that I'm going to do is to say, Get out this first, and then I'll say here, try and catch an exception so we're going to say here customer see one equals two, report dot find by ID of ID dot get, so we got the customer, but if there is an exception I'm going to go inside this and then I want to return something else first let me return a valid response from here so we're going to say response entity dot Okay.
And then we can say that hey, see one is the body for this particular response because we have a valid values. Now notice okay represents the status code 200 whereas, if anything else is there, I can probably send some other response for example, I can say, for not for saying that it is not fun instead of 500. So I can say here, response entity. And I can see here, dot status of, I can say for not for, and then I can say dot body of null because I don't have any response to be sent. And then I can say your semicolon. Of course, I have to say return, because I have to return some value.
So both places, I have to say return. And now you see that when there is data, I'm going to say 200. And then I'm sending that customer object. But if the data is not foreign, I'm sending a 404, but a body of knowledge. So let's go test it out. So first, let's say 45.
No problem in that. So we got the actual data 45. But if I say your 4567, which we don't have a note that previous output is 200 status here, but when I send this now, we're going to get four, not four, and the body is null. So there's no error as internal server error.