Spring引导RestController不适用于实现接口的类

时间:2017-03-16 16:12:01

标签: rest spring-boot spring-restcontroller

我正在尝试实现Springboot REST API。我定义@RestController的类似乎不起作用。我有一个名为MyService的类,它实现了所有抽象方法。我在类声明的顶部添加了@RestController注释,并为我需要从其余调用调用的方法添加了@RequestMapping注释。但这不起作用。我尝试了一个没有实现任何接口的类,并且工作正常。

这是代码

package com.my.service;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyService implements MyServiceInterface{

    @Override
    @RequestMapping("/age")
    public String Age() {
        return  "24";
    }
}

MyServiceInterface的代码

public interface MyServiceInterface {
    public String Age();
}

我从邮递员那里得到的错误是

{"timestamp":1489688505136,"status":404,"error":"Not Found","message":"No message available","path":"/age"}

2 个答案:

答案 0 :(得分:0)

发现它!似乎添加@Override是我通过为非重写方法添加@RequestMapping(“/ age”)来使其工作的原因。 像

@RequestMapping("/age")
public String Age() {
    return  "24";
}

答案 1 :(得分:0)

我在合同测试中遇到了同样的问题。我很困惑,因为还有其他@RestController个实现了它们的接口并且已正确映射。

然后,我以产品模式启动应用程序,并意识到控制器已正确映射。太奇怪了!

我正要删除接口,突然间想到了Spring代理。不知道为什么会想到我。然后,我检查了src/test/application.properties,发现它具有此属性spring.aop.proxy-target-class=false。我删除了它,现在一切都按预期运行。

现在这对我来说很有意义。 src/main/application.properties没有该属性。因此,在生产模式下,Spring代理方法是默认的代理方法。另一方面,测试使用的是其他Spring代理方法。我要和队友一起检查为什么要在那里。我相信应该使用默认的Spring代理方法。