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.