必要な共通のREST操作を実行する抽象クラスを作成しようとしていますが、実行しようとしているものが可能であればうまくできません。私はいくつかのアプローチを試してきましたが、そのコードを自分の頭の中でどのように動作させるべきかをすぐに取り除きました。抽象クラスのSpring Autowiredリポジトリ
以下の提案に従って、クラスが更新されました。問題は、CustomerRepositoryがJpaRepositoryに割り当てられないため、そのインタフェースを拡張するものの、具象クラスのコンストラクタが有効でないことです。
AbstractRestController
public abstract class AbstractRestController<T> {
private final JpaRepository<T, Serializable> repository;
public AbstractRestController(JpaRepository<T, Serializable> repository) {
this.repository = repository;
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<JsonResponseBody<T>> getOne(@PathVariable Long id) {
T restObj = repository.findOne(id);
JsonResponseBody<T> response = new JsonResponseBody<>(ResponseStatus.SUCCESS, restObj);
return ResponseEntity.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(response);
}
protected JpaRepository<T, Serializable> getRepository() {
return repository;
}
}
CustomerController
@RestController
@RequestMapping(value = "/api/v1/customer")
public class CustomerController extends AbstractRestController<Customer> {
@Autowired
public CustomerController(CustomerRepository repository){
super(repository);
}
}
CustomerRepository
public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
抽象クラスをインスタンス化することはできません。したがって、AbstractRestControllerは「コンポーネント」にできません。 –
良い点は、他のものを試して私に残っていた、それはもはや実装にはありません。私は、CustomerRepositoryがJpaRepositoryをTに設定してCustomerに設定していても、型が同じではないため、抽象クラスのリポジトリをCustomerRepositoryに設定できないと思います。私はジェネリックスとの誤解を浮き彫りにしていると思います。 –
Drew