2015-10-16 85 views
0

我有一個抽象的控制器和具有路徑變量在一些它的操作:Spring MVC的抽象控制器PathVariable

@Controller 
@RequestMapping("/generic-status/v1") 
public abstract class GenericStatusController{ 

    @RequestMapping(value = "/connection/availability/{connectionName}", method = { RequestMethod.GET }) 
    @ResponseStatus(HttpStatus.OK) 
    @ResponseBody 
    public abstract ConnectionResult checkConnection(@PathVariable("connectionName") String connectionName) throws ConnectionException, ParameterInvalidException, StatusApiException; 

當我擴展和使用它的所有請求映射工作正常。但不幸的是,路徑變量總是爲空。

你能幫我解決嗎?

在此先感謝

+0

你仍然需要'在你重寫的方法@ PathVariable' ... –

+0

謝謝你,但我不想指定此路徑變量覆蓋方法:S是還有其他方法嗎? –

+1

你有一個抽象方法,對方法參數的註釋不會被繼承,所以你沒有別的辦法,除非你在抽象方法中實現了這個方法,並且從這個方法切換到另一個方法,但是這並不能使事物漂亮。 –

回答

1

由於M.Deinum指出: 從擴展這個抽象控制器後,香港專業教育學院扣除你有這樣的事情:

@Override 
ConnectionResult checkConnection(String connectionName) throws ConnectionException, ParameterInvalidException, StatusApiException; { 
    // logic 
} 

這意味着控制器的情況下,你會使用實際上沒有描述和告訴Spring的@PathVariable映射它應該提供它作爲方法的參數。 解決方法:添加@PathVariable也在擴展的控制器:

@Override 
ConnectionResult checkConnection(@PathVariable("connectionName") String connectionName) throws ConnectionException, ParameterInvalidException, StatusApiException; { 
    // logic 
} 
+0

謝謝,但我不希望重寫方法指定此路徑變量:S是否有任何其他方式? –

+0

編輯。覆蓋這個方法沒有@PathVariable你說你想改變它的正常行爲。爲了保留它,註解必須再次使用。這似乎很正常。 –