Dans notre API REST, nous devons être capables de prendre en charge plusieurs locataires. Pour achiving ce tous les contrôleurs repos sous-classe un contrôleur REST commune qui définit un préfixe de mappage de demande et expose un attribut de modèle comme suitDocumenter automatiquement les paramètres annotés @PathVariable dans les méthodes annotées @ModelAttribute
@RequestMapping(path = "/{tenantKey}/api")
public class ApiController {
@ModelAttribute
public Tenant getTenant(@PathVariable("tenantKey") String tenantKey) {
return repository.findByTenantKey(tenantKey);
}
}
contrôleurs dérivés utilisent le modèle des attributs dans leurs méthodes de cartographie de demande:
@RestController
public class FooController extends ApiController {
@RequestMapping(value = "/foo", method = GET)
public List<Foo> getFoo(@ApiIgnore @ModelAttribute Tenant tenant) {
return service.getFoos(tenant);
}
}
Ce point final est bien documenté dans le swagger-ui. Je reçois un point de terminaison documenté avec un mappage GET pour le chemin /{tenantKey}/api/foo
.
Mon problème est que la variable de chemin {tenantKey} n'est pas documentée dans swagger-ui en tant que paramètre. La section paramètres dans swagger n'est pas rendue du tout. Si j'ajoute un paramètre String à la méthode du contrôleur, l'annoter avec @PathVariable("tenantKey)
tout va bien, mais je ne veux pas de paramètre tenantKey
dans ma méthode de contrôleur, puisque le locataire résolu est déjà disponible en tant qu'attribut de modèle. Donc ma question est: Y at-il un moyen d'obtenir le @PathVariable
de la méthode annotée @ModelAttriute
dans ApiController
documenté dans swagger-ui dans cette configuration?
-Configuration du projet est
- Printemps-Boot (1.4.2)
- springfox-swagger2 (2.6.1)
- springfox-fanfaronnades-ui (2.6.1)
Merci pour votre réponse. J'ai configuré une variable de chemin globale et cela résout parfaitement mon problème. Btw: La méthode 'getTenant' n'est pas traitée comme un mappage de requête. Il ne fait l'objet d'aucune documentation, mais c'est le comportement auquel je m'attendais puisqu'il ne fonctionne que de manière interne et qu'il n'a aucune influence sur l'API REST. –