当前位置: 首页 > 知识库问答 >
问题:

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

段干祺
2023-03-14

我正在尝试实现一个Springboot REST api。我定义@RestController的类似乎不起作用。我有一个名为MyService的类,它实现了所有抽象方法。我在类声明的顶部添加了@RestController注释,并为我需要从rest调用中调用的方法添加了@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个答案

太叔望
2023-03-14

找到了!似乎添加@Override是我通过为非重写方法添加@RequestMapping(“/age”)来让它工作的原因。喜欢

@RequestMapping("/age")
public String Age() {
    return  "24";
}
那安宁
2023-03-14

我只是在合同测试中遇到了同样的问题。我非常困惑,因为还有一些其他的@RestController实现了它们的接口,并且它们被正确地映射了。

然后我以prod模式启动我的应用程序,并意识到控制器被正确映射。非常奇怪!

我正要删除界面,突然想到了Spring代理。不知道为什么我会想到这个。然后我检查了我的src/test/application。属性,并意识到它有这个属性。aop。代理目标类=false。我把它取了下来,现在一切正常。

现在这一切对我来说都是有意义的<代码>src/main/application。属性没有该属性。因此,在prod模式下,Spring代理方法是默认方法。另一方面,测试使用另一种Spring代理方法。我要和我的队友们核实一下它为什么会在那里。我认为默认的Spring代理方法应该是一个合适的方法。

 类似资料:
  • 1) LSP是否也适用于接口,这意味着我们应该能够使用实现特定接口的类,并且仍然能够获得预期的行为? 2)如果确实如此,那么为什么编程到接口被认为是一件好事(BTW-我知道编程到接口会增加松散耦合),如果反对使用继承的主要原因之一是由于不遵守的风险LSP?也许是因为: a) 松耦合的好处大于不遵守LSP的风险 b)与继承相比,类(实现接口)不附着于LSP的可能性要小得多 谢谢你们

  • 问题内容: 我正在使用Spring框架(2.5)及其AOP功能。我有一个切入点表达,例如 凡ItemReader接口是一个Spring接口,它的签名是: 该接口有一个名为“ read”的方法,我要对其应用此建议:方法签名为: 但是,当我使用上述切入点表达式运行应用程序时,出现以下异常: java.lang.IllegalArgumentException:警告与此类型名称不匹配:org.sprin

  • Iam获得以下错误:-检查了lib文件夹,它是spring-beans我使用了以下名称空间:-http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/

  • 我在Google云平台上创建了一个kubernetes集群,之后,我在集群上安装了helm/Tiller,之后,我安装了带有helm的traefik,就像官方文档所说的那样。 现在我试图为服务创建一个入口,但是如果我将注释,则不会创建入口的负载均衡器。但是如果没有注释,它将使用默认入口。(服务类型为nodeport) 编辑:我还在一个干净的google cloud kubernetes集群中尝试了

  • 问题内容: 我正在尝试建立一个实现和的类。这两个接口都定义了方法,但是返回类型不同: K的类型擦除导致这两个方法签名冲突。我不能拥有它们中的一个,因为它是一个无效的覆盖,并且我不能拥有两个,因为它们具有相同的签名。有什么方法可以使这两个接口共存? 问题答案: 我认为在这种特殊情况下是不可能的。如果两个类都返回了对象类型,那么您将有机会,但是由于您混合了基本类型和对象类型,因此没有兼容的类型同时支持

  • 有一个 类、一个 IB 接口和一个实现 接口的 类。 类具有 类型的字段。在程序执行期间,此字段的值将成为类 的实例。如何为这种情况绘制类图?A和之间是否存在“组合”关系,组合是和之间的关系,还是只是依赖关系?