2015-10-16 81 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你说你想改变它的正常行为。为了保留它,注解必须再次使用。这似乎很正常。 –