HTTP 状态 405 - REST API 的“不允许方法”错误



在做了一些研究后问这个问题。我确实遵循了针对此类错误给出的解决方案,但对我不起作用。关于以下代码中出错的任何建议。我正在创建一个 REST API,但当我请求 url 时,它给了我 405 错误。下面是我请求的 URI。

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

下面是代码片段。

@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;  }
}

网站.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>

您可能正在为 GET 操作执行 PUT 调用请检查一次

在上面的代码变量"ver"被赋值为null,在返回之前打印"ver"并查看值。由于此具有空服务的"版本"的发送状态为"204 无内容"。

关于状态代码"405 - 方法不允许"将在休息控制器或服务仅支持 GET 方法但从客户端尝试使用有效 uri 请求的 POST 时获得此状态代码,在这种情况下获取状态为"405 - 方法不允许"

@Produces({"text/plain","application/xml","application/json"})

将其更改为

@Produces("text/plain")

并尝试,

我也遇到了这个问题,并且能够通过在服务器上启用 CORS 支持来解决它。就我而言,它是一个Azure服务器,这很容易:在Azure上启用CORS

因此,请检查您的服务器如何工作并启用 CORS。我什至不需要浏览器插件或代理:)

添加

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

@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 {
    ...
}

我遇到了同样的问题。就我而言,URL 缺少部分内容例如:

http://localhost:8080/root/path/action

相反,我有类似的东西

http://localhost:8080/root/action

带走的是检查 URL 是否正确。就我而言,我更正了我的 URL,问题已解决。

当我在打休息电话时得到 405 时,我做了所有的研究,没有一个对我有用。最后我意识到我没有在 tomcat 中放置正确版本的代码。一旦带有该方法的代码就位,其余调用就会起作用。仅供参考。请先检查您的代码版本!!!

最新更新