tomcat 7 - метод @GET с @ApplicationPath - ошибка состояния 404

я хочу запустить свой проект на tomcat, используя путь к конечной точке, следующие два моих java-файла

это мой класс приложения

package app;

    import javax.ws.rs.ApplicationPath;
    import javax.ws.rs.core.Application;

    @ApplicationPath("/t")
    public class App extends Application{

    }

это класс конечной точки

package controllers;

import java.util.List;

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

import dao.IEntityDAO;
import daoimpl.EntityDAOImpl;
import dto.Contacts;
import view.ContactView;

@ApplicationPath("/t1")
public class ContactController {

    @Path("/hi")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getpassword()
    {
        return "Hiii";
    }

    @Path("/t2")
    @GET()
    @Produces(MediaType.APPLICATION_JSON)
    public List<ContactView> getallEntity(){

        IEntityDAO obj = new EntityDAOImpl();

        return obj.getallEntity();
    }       


}

мой tomcat 7 работает, но когда я запускаю его на tomcat по следующему пути

http://localhost:8006/ContactApp/t/t1/hi

он показывает следующую ошибку

HTTP Status 404 - /ContactApp/t/t1/hi


type Status report

message /ContactApp/t/t1/hi

description The requested resource is not available.


Apache Tomcat/7.0.47

кто-нибудь может помочь??


person Faisal Amdani    schedule 03.07.2017    source источник


Ответы (1)


@ApplicationPath может применяться только к подклассу применения:

Идентифицирует путь к приложению, который служит базовым URI для всех URI ресурсов, предоставляемых Path. Может применяться только к подклассу Application.

Для этого:

@ApplicationPath("/t")
public class App extends Application{

}

Это нормально.

Но это не относится к ContactController, который не должен объявляться с @ApplicationPath:

@ApplicationPath("/t1")
public class ContactController {

но с @Path (без косой черты в начале) :

@Path("t1")
public class ContactController {

Выдержка из пути javadoc:

Определяет путь URI, для которого класс ресурсов или метод класса будет обслуживать запросы. .... Пути относительны. Для аннотированного класса базовый URI — это путь к приложению, см. ApplicationPath.

Наконец, вы должны удалить ведущую косую черту для @Path ваших методов REST: @Path("/t1")

Это не требуется, так как спецификация Path объясняет, что начальные / игнорируются, а базовый URI обрабатывается так, как если бы был добавлен /.

В целях абсолютизации пути по сравнению с базовым URI начальный символ «/» в пути игнорируется, а базовые URI рассматриваются так, как если бы они заканчивались на «/».

Итак, эти:

@Path("/hi")
...
@Path("/t2")

следует заменить на:

@Path("hi")
...
@Path("t2")
person davidxxx    schedule 03.07.2017