ホームページ >Java >&#&チュートリアル >SpringBootの複数のコントローラにURLプレフィックスを追加する方法

SpringBootの複数のコントローラにURLプレフィックスを追加する方法

WBOY
WBOY転載
2023-05-12 18:37:202101ブラウズ
はじめに

サービス コントローラーのプレフィックスが一貫している場合があります。たとえば、すべての URL のプレフィックスは /context-path/api/v1 なので、それを追加する必要があります。一部の URL に共通のプレフィックス。

考えられる解決策は、サービスのコンテキスト パスを変更し、コンテキスト パスに api/v1 を追加することです。この方法でグローバル プレフィックスを変更すると、上記の問題は解決できますが、欠点もあります。 URL には複数の接頭辞があります。たとえば、一部の URL には api/v2 を接頭辞として付ける必要があるため、区別できません。サービス内の一部の静的リソースが api/v1 を追加したくない場合、それらは区別できません。

以下は、カスタム アノテーションによる特定の URL プレフィックスの統合された追加を実装します。

1. 設定ファイルにプレフィックス設定を追加します

複数のプレフィックスが必要な場合は、複数の設定セットを追加します (例: api.prefix.v2=/api/v2##)。


#URL プレフィックス構成

##api.prefix.v1 =/api /v1

2. マップされたエンティティの構成

@Data
@Component
@ConfigurationProperties(prefix = "api.prefix")
public class ApiPrefix {
    private String v1;
}

3. カスタム アノテーション

このアノテーション関数は

@RestController

と一致します。 api.prefix.v1 の設定の場合、複数の設定セットがある場合は、複数のアノテーションを定義するだけです

@RestController
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface ApiV1RestController {
}
SpringBootの複数のコントローラにURLプレフィックスを追加する方法4. PathMatch をカスタマイズしてプレフィックスを追加します

###設定クラスを追加しますWebMvcConfigurer を継承し、configurePathMatch メソッドをオーバーライドして、クラスの ApiV1RestController アノテーションを使用して、対応するプレフィックスをコントローラーのインターフェイスに追加します。 ###
@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));
    }
}
###5.Test######対応するコントローラーで @RestController アノテーションの代わりに @ApiV1RestController アノテーションを使用する必要があります###
@ApiV1RestController
@RequestMapping("/test/apiv1")
public class TestApiV1RestController {
    @GetMapping()
    public ResponseEntity get() {
        return new ResponseEntity();
    }
}
#########

以上がSpringBootの複数のコントローラにURLプレフィックスを追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。