8

「/api」のマッピングを持つ親 Controller クラスを定義し、そのコントローラーをさまざまな実装で拡張できるようにしたいと考えています。したがって、ApiController は次のようになります。

@Controller
@RequestMapping("/api")

たとえば、ユーザー コントローラーはベース API コントローラーを拡張し、「/users」をパスに追加する必要があるため、「/api/users」リクエストに応答します。したがって、 UserController は次のようになります。

@Controller
@RequestMapping("/users")

しかし、これは ApiController を拡張するため、効率的に /api/users に応答します。

当然のことながら、すべてのコントローラーの前に「/api」を追加して、親クラスなしでこれを実現できますが、可能であれば「正しい方法」で行うことを好みます。これにより、API 実装をよりクリーンで見やすく定義できます。道。

ApiController 基本クラスを拡張しようとしましたが、これは機能しません。UserController は引き続き "/users" に応答し、基本クラス "/api" を無視します。

4

2 に答える 2

7

うーん。あなたはこれを試すことができます、それは私にとってうまくいくものです:

@RequestMapping("/abstract")
public abstract class AbstractController {


}

@Controller
public class ExtendedAbstractController extends AbstractController {

   @RequestMapping("/another")
   public String anotherTest() {
       return "another";
   }

}

基本クラスには@Controller注釈がなく、 abstractでなければならないことに注意してください。

コントローラーとして注釈が付けられた抽象クラスを拡張しようとすると、初期化@RequestMappingのステップでエラーが発生しRequestMappingHandlerMappingます。

于 2012-08-21T15:30:41.233 に答える