【问题标题】:RESTfull API does not print content on a specific path using jersey framework and apache tomact serverRESTful API 不使用 jersey 框架和 apache tomcat 服务器打印特定路径上的内容
【发布时间】:2019-06-20 13:34:39
【问题描述】:

我是编程新手,我正在尝试创建我的第一个 RESTfull API。我使用 Apache Tomcat/8.5.37 创建了一个服务器,并使用了 jersey RESTfull Web 服务。我的问题是没有使用路径http://localhost:8080/JavaAPI/rest/hello在 localhost:8080 上打印类内容(XML)

我创建了一个 tomcat 服务器,并在版本控制问题的情况下同时使用了 JAX-RS 2.0 / Jersey 2.25.x 和 JAX-RS 2.1 / Jersey 2.26+,但它们都不起作用。我只是想不出可能是什么问题。

package test;

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 javax.ws.rs.core.Application;

@Path("/hello")

public class Hello {

    @GET
    @Produces(MediaType.TEXT_XML)
    public String sayHello(){
        String resource ="<? xml version='1.0' ?>" +
                "<hello>, Hi, its  XML</hello>";
        return resource;
    }
}

这是REST服务文件的配置:

<display-name>JavaAPI</display-name>
  <servlet>
    <servlet-name>JAVA API</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>test</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup> 
  </servlet>
    <servlet-mapping>
     <servlet-name>JAVA API</servlet-name>
     <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

这是当前球衣库的截图:

lib libcont

预期的结果应该是:,嗨,它的 XML 将打印在 http://localhost:8080/JavaAPI/rest/hello 上,我收到以下 404 错误: 类型:状态报告

消息:未找到

描述:源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。

这可能不会重复的原因问题:首先,我已经复制/粘贴了他们的代码以及球衣旧版本 1.x,但问题仍然存在。根据我的经验,我认为版本控制存在问题,因为我一直在使用 Tomcat 8.5,并且我还从服务器收到以下响应:

TomcaterrTomcaterrcont

我遵循的指南是:https://www.youtube.com/watch?v=5jQSat1cKMo&t=782s&list=LL2fRfBs2m2v1wyy_kKt8E9w&index=2

【问题讨论】:

  • 您的 REST 服务是如何配置的?您确定基本路径吗?
  • 刚刚更新。我相信 JAVA API/rest/* 的路径很好
  • 能否提供服务器启动的完整日志输出?你在听导游吗?
  • 1) 您不需要扩展应用程序。 2) 您使用了错误的 init-param 名称。您正在使用的是 Jersey 1.x。您需要使用的是jersey.config.server.provider.packages。这是 Jersey 2.x 的属性。这应该对你有用。

标签: java eclipse tomcat jersey


【解决方案1】:

尝试像这样更改 init-param 配置。

<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>Test</param-value>
</init-param>

还可以考虑更改包名称以遵循 Java 命名约定:

包: 唯一包名的前缀总是用全小写的 ASCII 字母书写,应该是顶级域名之一,如 com、edu、gov、mil、net、org。 包名称的后续组成部分根据组织自己的内部命名约定而有所不同。

例子:

com.sun.eng
com.apple.quicktime.v2

// java.lang packet in JDK
java.lang

问题也在于映射。试试看

http://localhost:8080/JavaAPI/hello

【讨论】:

  • 不幸的是,它没有按预期工作,我只是得到了相同的 404,这次在消息选项卡上使用 /rest/hello/。感谢您的回复!
  • @HomerTsintilas 我更新了答案。尝试更改配置,然后再次尝试这两个链接。
  • 对我不起作用,会不会是版本问题?
  • @HomerTsintilas,你能用你目前的配置更新这个问题吗?如果您更改了某些内容,则可以自行分类
  • 刚刚做了。我还将添加我拥有的球衣库以防万一。
猜你喜欢
  • 2018-01-30
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
相关资源
最近更新 更多