Spring MVC Abstract Controller ::如何在实现抽象控制器接口时获得精确的方法签名

时间:2012-03-09 13:18:55

标签: eclipse spring

我正在使用STS 2.8.1和Spring 3.1.1.RELEASE。

我有一个抽象控制器,如下面的

public abstract class SuperController {

@RequestMapping(value = "/Entity", method = RequestMethod.POST, headers = "Accept=application/xml,application/json")
    public abstract @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity);

@RequestMapping(value = "/Entity/{id}", method = RequestMethod.GET, headers = "Accept=application/xml,application/json")
    public abstract @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id);
}

当我在STS中扩展控制器时,它给我方法签名如下

    @Override
public OAuthEntity setOAuthEntity(OAuthEntity oAuthEntity) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public OAuthEntity getOAuthEntity(Long id) {
    // TODO Auto-generated method stub
    return null;
}

我知道@RequestMapping继承得很好,我也测试了代码(它有效!!)。 我想要的是,当我扩展超级类时,我应该在抽象类中获得@ResponseBody,@ PathVariable(“id”)和@RequestBody。

当然我可以手动编辑它(这就是我正在做的事情,但想要更优雅的方式)这样Sub类就有如下方法签名

    @Override
public @ResponseBody OAuthEntity setOAuthEntity(@RequestBody OAuthEntity oAuthEntity) {

    @Override
public @ResponseBody OAuthEntity getOAuthEntity(@PathVariable("id") Long id) {

不是要杀我,而是要手动编写它令人沮丧。 非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

Spring 3取消了控制器的中断概念。我的建议是放弃抽象的Controller概念,只需将这些注释添加到控制器中。

继承在这种情况下没有任何意义。您希望一个且只有一个控制器方法在您的应用程序中处理给定的请求映射。在我看来,不需要父/子关系。我建议你将这些注释移动到适当的控制器实现中并删除你的抽象类。