【问题标题】:HTTP Status 404 – Not Found error in restapi responseHTTP 状态 404 – REST API 响应中未找到错误
【发布时间】:2018-02-18 15:13:10
【问题描述】:

昨天我创建了我的第一个 rest api。

这是我的代码

package RestClient;

//import javax.servlet.annotation.WebServlet;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/RestClient")
public class Restwebclient {

    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayXMLHello() {
        return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
    }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>Webservice</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>JAVA WS</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>RestClient</param-value>
</init-param>   
<load-on-startup>1</load-on-startup>
</servlet>


<servlet-mapping>
    <servlet-name>JAVA WS</servlet-name>
    <url-pattern>/Test</url-pattern>
</servlet-mapping>  

</web-app>

当我运行时,Apache 服务器在 Eclipse 中启动良好。但是,当我在本地主机上打开我期望我的数据不会出现的 url 时。它显示错误,如下面的屏幕截图所示。

https://prnt.sc/gjatoq

这些网址也出现同样的错误

http://localhost:8080/Webservice/RestClient
http://localhost:8080/Webservice/Restwebclient
http://localhost:8080/Webservice/Restwebclient/Test
http://localhost:8080/Webservice/Test

我已经尝试了每一件事,也切换了位置并选择了“使用 Tomcat 安装”选项。我真的有点卡住了。

除了本地主机 url 上的输出数据外,一切似乎都运行良好。

有没有人可以与我分享任何进一步的工作?

【问题讨论】:

  • eclipse项目,是不是叫“Webservice”?
  • @SharonBenAsher..是的,它的网络服务..!!
  • 检查上下文根。它位于项目设置中的“Web 项目设置”下
  • 尝试将url映射改成这个&lt;url-pattern&gt;/Test/*&lt;/url-pattern&gt;
  • 首先通过 Eclipse 设置上下文根 - 这将影响所有 http 请求:浏览器请求(记住 index.html)和 api 请求。然后是 web.xml 中的 url 映射。这将影响所有 api 调用。然后是类注释,它将影响该特定类中的所有方法。在休息时,一个类应该代表一个资源,@Path 应该反映该资源名称(例如@Path ("/Users"))和其他资源将由其他类处理,它们都在相同的上下文根和 url 映射下跨度>

标签: java eclipse apache tomcat http-status-code-404


【解决方案1】:

当您编写@Produces(MediaType.TEXT_XML) 时,这意味着响应将包含一个名为Content-Type 的HTTP 标头,其值为text/xml

但是,来自客户端的请求必须能够接受此响应。客户端必须发送具有相同值的Accept HTTP 标头(也可以是application/xml),否则 Web 服务器可能决定不发送响应或客户端可能决定丢弃响应。

Chrome(或任何其他浏览器)可能不是测试 rest api 调用(或一般的 api)的最佳工具。不仅因为 HTTP 标头,还因为能够使用 GET 以外的 HTTP 方法。您可以在 chrome 网上商店中搜索允许修改 http 标头的 mod,或使用适当的 http 客户端工具

我使用Fiddler。它具有丰富的功能,包括对 HTTP 请求内容的完全控制。

【讨论】:

  • 如果 MediaType 错误,响应应该是 405 而不是 404,对吧?但我也会推荐像 Postman 这样的 Rest-client。
  • @SharonBenAsher,我猜你说的对我来说都是有道理的。但就像你说的客户端也应该有能力接受 xml 响应。我怎样才能做到这一点?任何建议...因为这是我的第一个开发项目
猜你喜欢
  • 2020-03-20
  • 2019-12-02
  • 2015-12-29
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2019-03-12
相关资源
最近更新 更多