404在EJB上使用REST时未找到错误

404在EJB上使用REST时未找到错误,rest,jakarta-ee,ejb,restful-architecture,wildfly-9,Rest,Jakarta Ee,Ejb,Restful Architecture,Wildfly 9,我开发了一个消息传递EJB应用程序,其服务使用WILDFLY 9服务器。 现在应用程序正在运行,数据库已经完全正常运行,我正在尝试为这个应用程序开发一个RESTWeb服务。所以我创建了我的重启器: package tn.carmate.webservice; import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application; @ApplicationPath("rest") public class RestAct

我开发了一个消息传递EJB应用程序,其服务使用WILDFLY 9服务器。 现在应用程序正在运行,数据库已经完全正常运行,我正在尝试为这个应用程序开发一个RESTWeb服务。所以我创建了我的重启器:

package tn.carmate.webservice;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;


@ApplicationPath("rest")
public class RestActivator extends Application {

}
以及我的MessageResources.java,如下所示

package tn.carmate.webservice;

import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;

import tn.esprit.pi.Services.Services;
import tn.esprit.pi.persistance.Message;

@Path("message")
@RequestScoped
public class MessageRessource {

    @EJB
    Services servicemessage;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("{idreceiver}")
    public Response getMessageList(@QueryParam(value = "idreceiver") int idReceiver) {

        List<Message> message = servicemessage.getMessageList(idReceiver);
        return Response.status(Status.OK).entity(message).build();

    }

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    @Path("{idSrc/idDest/content}")
    public Response sendMessage(@QueryParam(value = "idSrc") int idSrc, @QueryParam(value = "idDest") int idDest,
            @QueryParam(value = "content") String content) {

        servicemessage.sendMessage(idSrc, idDest, content);
        return Response.status(Status.OK).build();
    }

    @DELETE
    @Path("{idm}")
    public Response deleteMessage(@QueryParam(value = "idm") int id) {
        servicemessage.deleteMessage(id);
        return Response.status(Status.OK).build();

    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("{idSender/idReceiver}")
    public Response getConversation(@QueryParam(value = "idSender") int idSender,
            @QueryParam(value = "idReceiver") int idReceiver) {
        List<Message> conversion = servicemessage.getConversation(idSender, idReceiver);
        return Response.status(Status.OK).entity(conversion).build();

    }


    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("{idR}")
    public Response returnInbox (@QueryParam(value = "idR")int idR){
        List<Message> listmessage = servicemessage.returnInbox(idR);
        return Response.status(Status.OK).entity(listmessage).build();
    }


    @DELETE
    @Path("{idc}")
    public Response deleteConversation(@QueryParam(value = "idc")int id){
        servicemessage.deleteConversation(id);
        return Response.status(Status.OK).build();
    }


}

仔细检查你的网址,我想应该是
http://localhost:8080
http://localhost:18080
。只是一个打字错误

其次,restful服务的应用程序基本路径设置为
rest
所以url应该是
http://localhost:8080/CarMate-web/rest/message?idreceiver=1

最后,
idreceiver
是一个查询参数,但@Path(“{idreceiver}”)将其视为路径参数

因此,在
http://localhost:8080/CarMate-web/rest/message?idreceiver=1
Rest端点期望在/message/{idreceiver}?idreceiver=1之后有一个路径变量,如注释中的
@Leonardo
所述

我建议以下列出的任何解决方案:

  • 从方法中删除@Path

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMessageList(@QueryParam(value = "idreceiver") int idReceiver) {
    List<Message> message = servicemessage.getMessageList(idReceiver);
    return Response.status(Status.OK).entity(message).build();
    }
    

  • 并使用此URL:
    http://localhost:8080/CarMate-web/rest/message/idreceiver?idreceiver=1

    关于restful的路径,您是对的,但是端口是18080。请注意,我尝试使用执行,但仍然得到相同的404错误请注意,当我测试其余23:16:06143警告[org.jboss.resteasy.core.ExceptionHandler](默认任务-34)无法执行:javax.ws.rs.NotFoundException:无法找到完整路径的资源:因为您有一个作为idreceiver的路径,我认为这应该是正确的调用:
    http://localhost:8080/CarMate-web/rest/message/idreceiver?idreceiver=1
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getMessageList(@QueryParam(value = "idreceiver") int idReceiver) {
    List<Message> message = servicemessage.getMessageList(idReceiver);
    return Response.status(Status.OK).entity(message).build();
    }
    
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @Path("idreceiver")
    public Response getMessageList(@QueryParam(value = "idreceiver") int idReceiver) {
    List<Message> message = servicemessage.getMessageList(idReceiver);
    return Response.status(Status.OK).entity(message).build();
    }