I have a Spring app that is using Hibernate and the Spring Data JPA\'s CrudRepository
. Everything seems to work properly if the data that was queried for exists in
Inspect the return value, if it's not null
, return some representation of it as a 200 OK
response. Otherwise, return a 404 Not Found
. In the end, you would have a controller like:
@RequestMapping(...)
public ResponseEntity> getOne(...) {
Something something = repository.findOne(...);
if (something == null)
return ResponseEntity.notFound().build();
return ResponseEntity.ok(something);
}
Optional
, as JB Nizet mentioned in the comments. Basically, Optional
is just a container that may or may not hold a value of type T
. You can use this type as the return type of Spring Data JPA methods, something like the following:
public interface SomethingRepository extends CrudRepository {
Optional findById(Long id);
}
Then define one exception for 404 Not Found
:
@ResponseStatus(HttpStatus.NOT_FOUND)
public class NotFoundException extends RuntimeException {}
If you throw an exception of type NotFoundException
in your controllers, Spring MVC's exception resolver would catch that exception and convert it to a 404 Not Found
HTTP response.
Finally your controller would be like:
@RequestMapping(...)
public Something getOne(...) {
return repository.findById(id).orElseThrow(NotFoundException::new);
}
Optional
support, read here.Optional
, read here.