Jonathan_Medeiros 28 de out. de 2020
Neste formato você está passando como variável de path, se você passar realmente como parâmetro na requisição, ele por si só já poderia existir ou não!
Exemplo:
/ dashboards / view / { space } / { id } ? filter = valor
/ dashboards / view / { space } / { id }
jbdj2006 28 de out. de 2020
eu pensei nisso, mas gostaria de saber se existe alguma maneira usando apenas variável de path.
Jonathan_Medeiros 28 de out. de 2020
Não, neste caso seriam duas rotas distintas, uma para quando houver filtro e outra para quando não houver filtro.
wldomiciano 28 de out. de 2020
Dá pra fazer da seguinte forma:
@RestController
class MyController {
@GetMapping ( { "/exemplo1/dashboards/view/{space}/{id}" , "/exemplo1/dashboards/view/{space}/{id}/{filter}" } )
String exemplo1 ( @PathVariable String space , @PathVariable int id , @PathVariable ( required = false ) String filter ) {
return space + " | " + id + " | " + filter ; // filter é null
}
@GetMapping ( { "/exemplo2/dashboards/view/{space}/{id}" , "/exemplo2/dashboards/view/{space}/{id}/{filter}" } ) // @formatter : off
String exemplo2 ( @PathVariable String space , @PathVariable int id , @PathVariable Optional < String > filter ) {
return space + " | " + id + " | " + filter . orElse ( "sem filtro" );
}
}
No exemplo 1 o valor de filter será null por padrão e no segundo exemplo, usando Optional vc pode escolher o valor usado quando filter não estiver presente.
Este artigo mostra outras formas de fazer: https://www.baeldung.com/spring-optional-path-variables