Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

137
Views
Cómo diferenciar edpoints con el mismo nombre pero diferentes parámetros de consulta en Spring Boot

Soy nuevo en Spring Boot y trato de hacer una API Rest con algunos recursos, tengo lo siguiente:

Obtener todas las reglas existentes :

 @GetMapping("/rules") @ResponseStatus(HttpStatus.OK) @ApiOperation(value = "Get all the existing rules", response = RuleViewModel.class) //Swagger documentation public ResponseEntity<Page<RuleViewModel>> get(@PageableDefault(page = 0, size = 25) Pageable pageable) { Page<Rule> rulesEntity = ruleService.findByDeletedIsSend(false, pageable); Page<RuleViewModel> ruleViewModels = rulesEntity.map(mapper::ruleViewModelMapper); return new ResponseEntity<>(ruleViewModels, HttpStatus.OK); }

Filtrar todas las reglas existentes con diferentes parámetros

 @GetMapping(value = "/rules") @ResponseStatus(HttpStatus.OK) @ApiOperation(value = "Get a specific rule by filter", response = RuleViewModel.class) public ResponseEntity<Page<RuleViewModel>> getByFilter( @RequestParam(name = "id", required = false) Optional<String> ruleId, @RequestParam(name = "description", required = false) Optional<String> description, @RequestParam(name = "types", required = false) Optional<List<Boolean>> types, @RequestParam(name = "layers", required = false) Optional<List<Layer>> layers, @RequestParam(name = "groups", required = false) Optional<List<Category>> groups, Pageable pageable ) { Page<Rule> rulesEntities = ruleService .filterRule( types.orElse(Arrays.asList(true, false)), layers.orElse(layerService.findByIsActive(true)), groups.orElse(categoryService.findByIsActive(true)), description.orElse(""), ruleId.orElse(""), false, pageable ); Page<RuleViewModel> ruleViewModels = rulesEntities.map(mapper::ruleViewModelMapper); return ruleViewModels.getSize() > 0 ? new ResponseEntity<>(ruleViewModels, HttpStatus.OK) : new ResponseEntity<>(HttpStatus.NOT_FOUND); }

Como puedes ver la ruta es la misma ("/rules") pero en el caso de los filtros agrega todos los parámetros opcionales.

El problema que tengo es que cuando quiero usar parámetros de filtro como:

 http://localhost:5656/v1/rules?id=7be4336d-6495-5b71-9bc2-a97c9da5ede2

Siempre va a obtener el punto final de todas las reglas.

La solución que hice fue agregar la ruta de "búsqueda" al URI de esta manera:

http://localhost:5656/v1/rules/search?id=7be4336d-6495-5b71-9bc2-a97c9da5ede2

Entonces, las solicitudes se asignan correctamente, pero creo que viola las mejores prácticas de Rest.

¿Podría indicarme la forma correcta de lograr esto?. Gracias por adelantado.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Dado que ambos métodos tienen el mismo tipo de devolución y todos los parámetros del método getByFilter son opcionales, ¿por qué no elimina el método getByFilter y agrega los parámetros como parámetros opcionales al método get? El método get puede realizar la lógica de filtro si se pasa alguno de los parámetros opcionales; de lo contrario, devolver la respuesta completa sin ningún tipo de filtrado.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!