Unit test using mocks
As long as the real implementation that is being mocked here is also unit tested. And the mock is configured to match the expected behavior of the real implementation. You should be fine.
However you gotta remember to change all mock configuration when expectations of the real implementation change. This should not happen often for a library (BC break) but it is much more common in applications.
You are also depending on a specific implementation and if in future the tested object is changed to use different approach/calling other methods of other classes etc, your tests will have to change.
But anyway there is something your test does not test. It does not check that the correct json is returned by the endpoint. And it does not test what happens when exception is thrown. Although the latter should probably be a separate test.
One note for the route, I'm not sure whether save method throwing an exception should be considered a client error (400). It is not client's fault that your db failed.