【问题标题】:Spring boot RestController won't work with classes which implements an interfaceSpring boot RestController 不适用于实现接口的类
【发布时间】:2017-08-07 22:32:44
【问题描述】:

我正在尝试实现 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"}

【问题讨论】:

  • 能否请您分享您的“MyServiceInterface”并分享您遇到的异常的堆栈跟踪......
  • @VelNaga 检查我的编辑
  • 当你启动 spring-boot 应用程序时,它会打印控制台和/或日志中的所有映射。看看/age 是否映射到任何东西。您的问题可能出在配置中。在 Java 中,方法名称也以小写字母开头。
  • @jny 我检查了控制台和 /age 没有映射其他人被映射(他们的类没有实现任何接口的那个)
  • 如果“/age”没有被映射意味着检查你的包结构.....这个包应该是你的主类的一个子包,或者在你的包中配置@ComponentScan。 ..只需分享您的包结构...

标签: rest spring-boot spring-restcontroller


【解决方案1】:

我在合同测试期间遇到了同样的问题。我很困惑,因为还有其他一些@RestControllers 实现了它们的接口并且它们被正确映射。

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

我正要删除接口,突然想到Spring代理。不知道为什么会出现在我的脑海里。然后我检查了我的src/test/application.properties 并意识到它有这个属性spring.aop.proxy-target-class=false。我删除了它,现在一切都按预期工作了。

现在这一切对我来说都是有意义的。 src/main/application.properties 没有那个属性。所以 Spring 代理方法是 prod 模式下的默认方法。另一方面,测试使用的是另一种 Spring 代理方法。我要和我的队友一起检查它为什么在那里。我相信默认的 Spring 代理方法应该是一种选择。

【讨论】:

    【解决方案2】:

    找到了!似乎添加@Override 是我通过为非覆盖方法添加@RequestMapping("/age") 来管理它的原因。 喜欢

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

    【讨论】:

    • [at]Override 不是这里的问题,因为我的应用程序运行良好。我有一个接口,它在一个类中实现,所有方法都用 [at]Override 以及请求映射注释。他们工作得很好。请检查真正的原因。
    猜你喜欢
    • 2015-07-18
    • 2021-01-10
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    相关资源
    最近更新 更多