SST
SST

Reputation: 2144

how to configure spring-data-rest search method path with @PathVariable

I want to customize my spring-data-rest search method path by passing parameter as a path variable like follows

http://localhost:8080/orders/search/customers/{customerId}

findByCustomer(@PathVariable("customerId") Integer customer);

The search resource listh the links as follows

http://localhost:8080/orders/search/customers/%7BcustomerId%7D

How to expose search url with path params?

Upvotes: 1

Views: 3384

Answers (2)

marioosh
marioosh

Reputation: 28556

You can use custom handler similar to this:

@RepositoryRestController
public class OrderController {

    @Autowired
    OrderRepository orderRepository;

    @GetMapping("/orders/search/customers/{id}")
    public @ResponseBody ResponseEntity<?> getByCustomers(@PathVariable Integer customer) {
        Order order = orderRepository.findOne(id);
        if(order == null) return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
        Resource<Order> resource = new Resource<Order>(order); 
        return ResponseEntity.ok(resource);
    }
}

More about this can be found here.

Upvotes: 1

devops
devops

Reputation: 9179

Use HttpServletRequest to get the request url:

findByCustomer(@PathVariable("customerId") Integer customer, HttpServletRequest request){
    String request = request.getRequestURL().toString(); // StringBuffer, so use append if you want to...
    [...]
}

also you can use request.getQueryString() to get the query part after ?.

Upvotes: 0

Related Questions