因此,我有一個名為CircuitController的控制器,我想從ID和參考中獲取一個物體:
@GetMapping("/api/circuits/{id}")/span>
public EntityModel<Circuit> getCircuitById(@PathVariable Long id){
Circuit circuit = circuitRepository.findById(id)
.orElseThrow(() -> new CircuitNotFoundException(id))。
return circuitModelAssembler.toModel(circuit)。
}
@GetMapping("/api/circuits/")。
public EntityModel<Circuit> getCircuitByRef(@RequestParam(value="ref")/span> String ref){
///這里沒有 "circuitRepository.findByRef(ref) "方法。 {
}
對于第二個方法,沒有findByRef(String ref)方法已經在JPARepository
我想出了2個解決方案:
在我的CircuitRepository類中,我可以定義一個默認的方法findByRef(String ref)來做我需要的事情,然后在CircuitController類中使用它。
@Repository
public interface CircuitRepository extends JpaRepository<Circuit, long> {
default Circuit findCircuitByRef(String ref) {
可選<電路> 電路 = this.findAll()
.stream()
.filter(circuit1 -> circuit1.getCircuitRef().equals(ref))
.findAny()。
if (circuit.isPresent() ) {
return circuit.get()。
} else {
throw new CircuitNotFoundException(ref)。
}
}
然后我可以做:
@GetMapping("/api/circuits/")
public EntityModel<Circuit> getCircuitByRef(@RequestParam(value="ref")/span> String ref) {
Circuit circuit = circuitRepository.findCircuitByRef(ref)。
return circuitModelAssembler.toModel(circuit)。
- 第二種選擇是在我的
getCircuitByRef方法中直接實作這個邏輯,像這樣:
@GetMapping("/api/circuits/")
public EntityModel<Circuit> getCircuitByRef(@RequestParam(value="ref")/span> String ref){
電路電路。
可選<電路> optionalCircuit = circuitRepository.findAll()
.stream()
.filter(circuit1 -> circuit1.getCircuitRef().equals(ref))
.findAny()。
if (optionalCircuit.isPresent() ) {
circuit = optionalCircuit.get()。
} else {
throw new CircuitNotFoundException(ref)。
}
return circuitModelAssembler.toModel(circuit)。
}
我不確定這里的最佳實踐是什么,也不確定spring應用程式的代碼標準是怎樣的。我注意到的一點是,通過第一個選項,我可以在以后模擬我的CircuitRepository介面,并模擬findByRef方法用于UT。
uj5u.com熱心網友回復:
一般來說,在一個專案中分離功能組件是一個比較好的做法。我更喜歡這樣做--控制器負責處理API呼叫,存盤庫負責資料訪問。所以,我堅持使用第一種方案。
至于實際實作,我建議使用Spring的功能。雖然沒有findCircuitByRef(String ref)方法,但Spring可以為你創建一個該方法的實作。你可以做的是:
@Repository
public interface CircuitRepository extends JpaRepository<Circuit, Long> {
電路 findByCircuitRef(String ref)。
}
Spring在幕后所做的作業如下--它將創建這個方法的實作,它將完成你在默認實作中的作業。 你可以看到更多關于該主題的資訊這里.
。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324188.html
標籤:
上一篇:VBA,將50個Excel作業簿中的選定資料轉移到一個目標Excel作業簿中
下一篇:SQL索引可以使搜索時間更長嗎?
