Issue
I have a REST call that accepts a JSON object, lets say, a person. After I create this object (validated and saved to the database), I need to return the newly created JSON Object.
I think the standard practice is to return 201 Accepted
instead of returning the object immediately. But my application needs the newly created object immediately.
I have a controller methods that take a POST call, calls a service class, which in turn calls a DAO that uses Hibernate to create the object. Once it's saved to the database, I am calling another controller method that takes the ID of the person and returns the Object.
My question, is this the better approach? i.e., calling another Controller method to get the newly created object. Or the POST call itself should return the Object.
The main question is: Calling another method takes a round trip and I guess it's an overkill. (Service->DAO->Hibernate->Database). Instead I think I should get the Object from the database immediately after it's saved in the same call (from the method that handled POST).
What is the architecture standard here?
Solution
Try using ResponseEntity
which returns HTTP status along with the object you need.
Sample code is (this was my code where I am returning Customer object, change it as per your needs) :
// imports (for your reference)
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
// spring controller method
@RequestMapping(value = "getcust/{custid}", method = RequestMethod.GET, produces={"application/json"})
public ResponseEntity<Customer> getToken(@PathVariable("custid") final String custid, HttpServletRequest request) {
customer = service.getCustById(custid);
return new ResponseEntity<Customer>(customer, HttpStatus.OK);
}
Read this documentation to know more. Some sample code has been provided there.
Answered By - Jeevan Patil