2017-09-27 64 views
1

我在春天RestController以下方法:彈簧安置控制器找到ID/IDS方法

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET) 
    public DecisionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId) { 
.... 
} 

現在我需要通過{decisionIds}增加的可能性,找到一套DecisionResponse的..這樣的事情:

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET) 
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) { 
.... 
} 

以下兩種方法不能一起工作。

什麼是實現此功能的正確方法?我是否應該只留下一個方法(第二個),等待{decisionIds}並返回一個集合,即使我只需要一個Decision對象?有沒有其他適當的方法來實現這一點?

回答

1

您可以同時發送單一的長值,以及對於長值的數組來創建一個端點:

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET) 
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) { 
      System.out.println(decisionIds); 
} 

,並通過發送路徑變量像這樣調用這個端點:

http://localhost:8080/11,12,113,14

2

你的問題是你不能在同一端點上有兩種不同的方法。

換句話說,你不能在同一時間這兩個方法:

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET) 
    public DecisionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId) { 
.... 
} 
@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET) 
    public List<DecisionResponse> findByIds(@PathVariable @NotNull @DecimalMin("0") Set<Long> decisionIds) { 
.... 
} 

因爲

@RequestMapping(value = "/{decisionIds}", method = RequestMethod.GET) 

而且

@RequestMapping(value = "/{decisionId}", method = RequestMethod.GET) 

是同一端點。

因此,當您在http://<host>/19上獲得HTTP請求GET時,無法確定要使用哪種方法。

解決方案

重命名端點更清楚,以避免衝突

@RequestMapping(value = "/decision/{Id}", method = RequestMethod.GET) 

而且

@RequestMapping(value = "/decisions/{Id}", method = RequestMethod.GET) 

我希望這會幫助你。