HTTP-status 405 – Methode niet toegestaan Fout voor Rest API

Ik stel deze vraag nadat ik wat onderzoek heb gedaan. Ik heb de gegeven oplossingen voor dit soort fouten gevolgd, maar werkte niet voor mij. Eventuele suggesties over waar het mis gaat in de onderstaande code. Ik maak een REST API, maar wanneer ik de url opvraag, krijg ik de 405-fout. Hieronder staat de URI die ik aanvraag.

   http://localhost:8080/Project/services/start/version

Hieronder staat het codefragment.

@Path("/start")
public class StartService {
@GET
@Path("/version")
@Produces({"text/plain","application/xml","application/json"})
public String getVersion() {
    String ver="";
    try{
          Runtime rt = Runtime.getRuntime();
          Process pr = rt.exec("C:\\server\\dgr -v" );
          BufferedReader stdInput = new BufferedReader(new InputStreamReader
(pr.getInputStream()));
          BufferedReader input = new BufferedReader(stdInput);
         // String ver ="";
          StringBuffer verOutput = new StringBuffer();
                while((ver =  input.readLine()) != null){
                    verOutput.append(ver + "\n");
                    System.out.println(ver);
                }
        }catch (Throwable t)  
          {  
            t.printStackTrace();  
          }  
        finally {  
        }
    return ver;  }
}

web.xml:

<web-app 
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<display-name>eLicensingWeb</display-name>      
    <servlet-name>JAX-RS REST</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.cem.plc.service</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>JAX-RS REST</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

Antwoord 1, autoriteit 100%

@Produces({"text/plain","application/xml","application/json"})verander dit in @Produces("text/plain")en probeer,


Antwoord 2, autoriteit 98%

In bovenstaande code wordt variabele “ver” toegewezen aan null, druk “ver” af voordat u terugkeert en bekijk de waarde. Aangezien deze “ver” met null-service de status “204 Geen inhoud” heeft.

En over statuscode “405 – Methode niet toegestaan” krijgt deze statuscode wanneer de restcontroller of service alleen de GET-methode ondersteunt, maar van de kant van de klant probeert u met POST met een geldig uri-verzoek, tijdens een dergelijk scenario krijgt u de status als “405 – Methode niet toegestaan”


Antwoord 3, autoriteit 100%

Misschien doet u een PUT-aanroep voor GET-bewerking
Controleer een keer


Antwoord 4

Ik had dit probleem ook en heb het kunnen oplossen door CORS-ondersteuning op de server in te schakelen. In mijn geval was het een Azure-server en het was eenvoudig: CORS inschakelen op Azure

Dus controleer voor uw server hoe deze werkt en schakel CORS in. Ik had niet eens een browser-plug-in of proxy nodig 🙂


Antwoord 5

Toevoegen

@Produces({"image/jpeg,image/png"})

naar

@POST
@Path("/pdf")
@Consumes({ MediaType.MULTIPART_FORM_DATA })
@Produces({"image/jpeg,image/png"})
//@Produces("text/plain")
public Response uploadPdfFile(@FormDataParam("file") InputStream fileInputStream,@FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception {
    ...
}

Other episodes