java - जर्सी का उपयोग करते समय एचटीपी विधि GET दिखाती है




rest servlets (4)

अपने वर्ग को @ पद एनोटेशन के साथ एनोटेट करें क्योंकि आपकी कक्षा एक संसाधन के रूप में इलाज के लिए जेएक्स-आरएस रनटाइम द्वारा आवश्यक है।

मैं रीस्ट एपीआई सीखने के लिए ट्यूटोरियल का पालन कर रहा हूं नीचे मेरा कोड है जो एनोटेशन मिला है और वेबलॉगिक सर्वर का उपयोग करने के लिए मेरे आवेदन को लागू करने के लिए है। किसी कारण के लिए यह निम्नलिखित त्रुटि दिखा रहा है:

HTTP method GET is not supported by this URL

Sample.java

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("/v1")
public class V1_status {
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String returnTitle(){
        return "<p> Yess </p>";
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>com.glasschecker.rest</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.glasschecker.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>

  </web-app>

यह ट्यूटोरियल है:

https://www.youtube.com/watch?v=4DY46f-LZ0M&list=PLu47tUtKqNlwfR- nqjiWUaIWOYEi9FyW0 और सूचकांक = 2

मैं निम्नलिखित URL http: // localhost: 7001 / com.glasschecker.rest / api / v1 का उपयोग करता हूँ, यूआरएल पैटर्न सर्लेट में जोड़ा जाता है।

जब मैं http: // localhost: 7001 / com.glasschecker.rest का उपयोग करने की कोशिश करता हूं तो यह index.html फ़ाइल को ठीक से (मेरी वेब। Xml में पहली फ़ाइल) दिखाती है। मुझे यकीन है कि मेरी फाइल में कुछ है

नोट करें कि जावा वर्ग इस पैकेज के अंदर है:

com.glasschecker.rest.status

यह त्रुटि है जो मुझे मिल रही है:

weblogic.application.ModuleException: weblogic.management.DeploymentException: [HTTP:101170]The servlet org.foo.rest.MyApplication is referenced in servlet-mapping /api but not defined in web.xml.
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:237)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:232)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    Truncated. see log file for complete stacktrace
Caused By: weblogic.management.DeploymentException: [HTTP:101170]The servlet org.foo.rest.MyApplication is referenced in servlet-mapping /api but not defined in web.xml.
    at weblogic.servlet.internal.WebAppServletContext.verifyServletMappings(WebAppServletContext.java:1566)
    at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3066)
    at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1830)
    at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:875)
    at weblogic.application.internal.ExtensibleModuleWrapper$StartStateChange.next(ExtensibleModuleWrapper.java:360)

आप परिभाषित /v1 पथ लेकिन अनुरोध /api/v1 प्रयत्न:

@Path("/api")
public class V1_status {
    @Path("v1")
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String returnTitle(){
        return "<p> Yess </p>";
    }
}

संपत्ति "com.sun.jersey.config.property.package" को सिर्फ पैकेज के रूप में सेट करना होगा जिसमें वेब सेवा वर्ग शामिल हैं।

आपके मामले में "V1_status" वर्ग पैकेज है: "com.glasschecker.rest.status"

<init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>com.glasschecker.rest.status</param-value>
</init-param>

जैसा जर्सी सर्वलेट कॉन्टैनेयर दस्तावेज़ में निर्दिष्ट है

if the initialization parameter "com.sun.jersey.config.property.resourceConfigClass" is not present and a initialization parameter "com.sun.jersey.config.property.packages" is present a new instance of PackagesResourceConfig is created. The initialization parameter "com.sun.jersey.config.property.packages" MUST be set to provide one or more package names.

संकुल ResourceConfig गतिशील रूट संसाधन और प्रदाता वर्गों के लिए खोज करता है। इस मामले में "V1_status" आपका रूट संसाधन है।


  1. वेब। web.xml फ़ाइल हटाएं या सभी सर्विसलेट और सबलेट मैपिंग चीजें हटाएं।
  2. वहाँ एक ApplicationConfig वर्ग होना चाहिए जो ApplicationConfig को फैलता है। ऍनोटेट एपॉलेशनपाथ ApplicationPath('/') या फिर आप चाहते हैं

यहाँ एक उदाहरण ApplicationConfig वर्ग है

@javax.ws.rs.ApplicationPath("/")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        addRestResourceClasses(resources);
        return resources;
    }

    /**
     * Do not modify addRestResourceClasses() method.
     * It is automatically populated with
     * all resources defined in the project.
     * If required, comment out calling this method in getClasses().
     */
    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(com.testrest.StuffResource.class);
    }

}




jersey