【问题标题】:NoSuchMethodException: Could not find a suitable constructorNoSuchMethodException:找不到合适的构造函数
【发布时间】:2018-06-13 11:47:55
【问题描述】:

我使用 JAX-RS 注释创建了简单的 REST 端点 API 接口:

package pl.webservice.cards;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/cards")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public interface CardsServiceApi {

    @GET
    @Path("/message")
    public String getMessage();
}

及其实现:

package pl.webservice.cards;

public class CardsService implements CardsServiceApi{

    @Override
    public String getMessage() {
        return "Hello World!";
    }
}

在 POSTMAN 中发送请求后,我收到以下响应:

java.lang.NoSuchMethodException:找不到合适的构造函数 在 pl.webservice.cards.CardsServiceApi 类中。

有趣的是,当我在非接口类中“合并”两个类时,一切正常。为什么?

【问题讨论】:

  • 你的 JAX-RS 实现是什么?

标签: java web service jax-rs


【解决方案1】:

我认为,问题在于 REST-Annotations 在接口中。服务器尝试实例化接口,这是不可能的。如果将注释移到实现类,一切都应该工作。

【讨论】:

  • 看起来合乎逻辑 :) 谢谢
  • 注解可以在界面上。只是@Path 需要在具体类上。 @Path 类是 Jersey 将尝试实例化的。但在接口上包含所有其他 JAX-RS 注释是完全合法的。
  • 我认为这不是更好的解决方案。 “带有 JAX-RS 2.0 的 Restful Java”一书说:“在实现类中不需要 JAX-RS 注释。我们所有的元数据都局限于接口”。我认为它是正确的,因为这样你可以分开控件和注释的逻辑。这是一个很好的做法,因为任何时候您都可以部署相同的控件,如 Jax-RS、Jax-Ws 等,但只实现不同的接口(或两者)
猜你喜欢
  • 2022-01-11
  • 2016-03-24
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多