【问题标题】:Annotations in interface RestController [duplicate]接口 RestController 中的注释 [重复]
【发布时间】:2016-04-08 01:04:17
【问题描述】:

我创建了界面:

@RequestMapping("/data")
public interface PersonControllerInterface {

    @RequestMapping(value="/person/{id}", method=RequestMethod.GET)
    public Person getPersonDetail(@PathVariable final Integer id);

}

以及实现该接口的类:

@RestController
public class PersonController implements PersonControllerInterface {

    @Override
    public Person getPersonDetail(final Integer id) {
        final Person p = new Person(id);
        return p;
    }

}

但是在我打电话给GET localhost:8080/data/person/4 之后。我得到了:

DEBUG o.s.web.servlet.DispatcherServlet - Could not complete request
java.lang.NullPointerException: null
at com.concretepage.Person.<init>(Person.java:12)
at com.concretepage.PersonController.getPersonDetail(PersonController.java:16)

还有Person 类:

public Person(final Integer id) { this.id = id; }

在 jax-rs 中我可以做类似的事情,但在 Spring 中它无法获取路径中的 id。我的问题有什么解决方案吗?我真的不想在我的实现类中放@PathVariable 注解。

编辑:它不是修复 NPE 的重复。将注解从接口类传播到实现是一个问题。

【问题讨论】:

  • 你能包含完整的堆栈跟踪吗?
  • 共享 PersonService(第 12 行?)
  • public Person(final Integer id) { this.id = id;这不是构造函数的问题,而是 id 为 null 的问题
  • 为什么这个问题与另一个问题重复:这个问题在这里已经有了答案:什么是 NullPointerException,我该如何解决? 12 个答案。最后一个是常见的java问题,但目前与spring-mvc有关
  • 不,因为不是NPE的问题,而是接口的注解没有填充到具体类中的问题

标签: java spring inheritance controller


【解决方案1】:

您正在将 Rest 接口与您的应用程序接口绑定......我无法想象这种解决方案会有所帮助的情况。只需在简单的类中进行请求映射(因此很容易找出请求在哪里结束),如果您需要更改实现,只需在其中选择一个(或者如果需要,可以使用一些 DI)。

编辑:好的,有工具可以生成界面,反正这看起来像重复的https://stackoverflow.com/a/8005644/2037762

【讨论】:

  • 我想从 swagger codegen 为每个端点生成接口。之后,我想实现我的控制器类的接口并从那里覆盖方法。在这一点上,我不想重写任何注释
  • 在开发 Web 服务时,有一个包含 API(即接口和模型对象)的 JAR 和另一个包含实现的 JAR 很有用。而且你不想重复注释,所以我完全同意 OP 的需要。
  • 我在 jax-rs pastebin.com/M1HZLbti987654322@ 中工作的示例
  • 所以答案是“不,你不能”?
  • 是的,对我来说与链接中的情况相同
猜你喜欢
  • 2013-08-31
  • 1970-01-01
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多