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