Maison >Java >javaDidacticiel >Comment ajouter un préfixe d'URL à plusieurs contrôleurs SpringBoot
Dans certains cas, les préfixes du contrôleur de service sont cohérents. Par exemple, le préfixe de toutes les URL est /context-path/api/v1, et un préfixe unifié doit être ajouté à certaines URL.
La solution envisageable consiste à modifier le chemin contextuel du service et à ajouter api/v1 au chemin contextuel. La modification du préfixe global peut résoudre le problème ci-dessus, mais il existe des inconvénients si l'URL a plusieurs préfixes, tels que. certaines URL Si vous devez le préfixer avec api/v2, vous ne pouvez pas faire la différence. Si vous ne souhaitez pas ajouter api/v1 à certaines ressources statiques du service, vous ne pouvez pas non plus faire la différence.
Ce qui suit est l'ajout unifié de certains préfixes d'URL via des annotations personnalisées.
Si vous avez besoin de plusieurs préfixes, ajoutez plusieurs ensembles de configurations, par exemple, ajoutez : api.prefix.v2=/api/v2
####### #### ####configuration du préfixe d'url#################
api.prefix.v1=/api/v1
@Data @Component @ConfigurationProperties(prefix = "api.prefix") public class ApiPrefix { private String v1; }.
Cette fonction d'annotation est cohérente avec @RestController
et correspond à la configuration de api.prefix.v1. S'il existe plusieurs ensembles de configurations, définissez simplement plusieurs annotations
@RestController @Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ApiV1RestController { }
Ajoutez un héritage de classe de configuration WebMvcConfigurer, remplace la méthode configurePathMatch et ajoute le préfixe correspondant à l'interface dans le contrôleur avec l'annotation ApiV1RestController sur la classe.
@AutoConfiguration public class WebMvcConfig implements WebMvcConfigurer { @Autowired private ApiPrefix apiPrefix; @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.addPathPrefix(apiPrefix.getV1(), c -> c.isAnnotationPresent(ApiV1RestController.class)); } }
Vous devez utiliser l'annotation @ApiV1RestController au lieu de l'annotation @RestController sur le contrôleur correspondant
@ApiV1RestController @RequestMapping("/test/apiv1") public class TestApiV1RestController { @GetMapping() public ResponseEntity get() { return new ResponseEntity(); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!