Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

138
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda