I have requirement where in which i need to override the delete functionality from the rest Resource using a custom controller.here is the code for restResource
@RepositoryRestResource
public interface SampleRepository extends JpaRepository<Sample,Long>{
List<Sample> findBySampleNumber(@Param("sampleNumber") String sampleNumber);
}
i have created a a custom controller which overides only delete fuctionality
@RepositoryRestController
@RequestMapping("/api/samples")
public class SampleController{
@Autowired
SampleRepository sampleRepository;
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public void delete(@PathVariable Long id) {
//do some custom logic here
//then delete the sample
//sampleRepository.delete(id);
}
However if now try to make a GET api/samples/1(someId)
or look up some search functionality on the RepositoryRestResource, I see the following error
"description": "Request method 'GET' not supported"
is there way to override only one HTTP verb have the rest of the functionality coming up from the repository.
However if i comment public void delete
from the controller i am able to access all the crud and Search operations
Has Anyone encountered such an issue
I am using SPRING_DATA_REST-2.5.1-Release
CrudRepository provides CRUD functions. PagingAndSortingRepository provides methods to do pagination and sort records. JpaRepository provides JPA related methods such as flushing the persistence context and delete records in a batch.
It is not recommended in real-world applications as you are exposing your database entities directly as REST Services. While designing RESTful services, the two most important things that we consider are the domain model and the consumers. But, while using Spring Data REST, none of these parameters are considered.
@RepositoryRestResourceIf you want to write a custom handler for a specific resource taking advantage of Spring Data REST's settings, message converters, exception handling and more, you can use @RepositoryRestController (instead of the standard Spring MVC @Controller or @RestController annotations).
and collectionResourceRel is described: The rel value to use when generating links to the collection resource.
You need to define your controller as
@RepositoryRestController
public class SampleController{
@Autowired
SampleRepository sampleRepository;
@RequestMapping(value = "/api/samples/{id}", method = RequestMethod.DELETE)
public void delete(@PathVariable Long id) {
}
As well as spring data provide different events to perform before and after the domain create,save and delete.
Refer http://docs.spring.io/spring-data/rest/docs/current/reference/html/#events
You have to use the RequestMapping annotation at the method level only.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With