当前位置: 首页 > 面试题库 >

如何仅使用注释(不使用web.xml)设置JAX-RS Application?

魏书
2023-03-14
问题内容

前面提到的依赖项对我不起作用。从Jersey用户指南中:

Jersey提供了两个Servlet模块。第一个模块是Jersey核心Servlet模块,它提供核心Servlet集成支持,并且在任何Servlet 2.5或更高版本的容器中都是必需的:

<dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet-core</artifactId>
</dependency>

为了支持其他Servlet 3.x部署模式和异步JAX-RS资源编程模型,需要一个附加的Jersey模块:

<dependency>
 <groupId>org.glassfish.jersey.containers</groupId>
 <artifactId>jersey-container-servlet</artifactId>
</dependency>

jersey-container-servlet模块取决于jersey-container-servlet-core模块,因此,在使用该模块时,不必显式声明jersey-container-servlet-core依赖性。


问题答案:

接受的答案确实有效,但前提是将Web应用程序部署到Glassfish或Wildfly之类的应用程序服务器,并且可能部署到具有EE扩展名的servlet容器(例如TomEE)。它不适用于像Tomcat这样的标准servlet容器,我敢肯定,大多数在此寻找解决方案的人都想使用它。

如果你正在使用标准的Tomcat安装(或其他一些servlet容器),则需要包括REST实现,因为Tomcat并不附带此实现。如果你使用的是Maven,请将其添加到以下dependencies部分:

<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.13</version>
  </dependency>
  ...
</dependencies>

然后只需将应用程序配置类添加到你的项目中。如果除了设置其余服务的上下文路径之外,没有其他特殊配置需求,则该类可以为空。添加此类后,你无需在web.xml其中进行任何配置(或完全不需要配置):

package com.domain.mypackage;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest") // set the path to REST web services
public class ApplicationConfig extends Application {}

之后,使用Java类中的标准JAX-RS批注直接声明Web服务:

package com.domain.mypackage;
import javax.ws.rs.Consumes;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;

// It's good practice to include a version number in the path so you can have
// multiple versions deployed at once. That way consumers don't need to upgrade
// right away if things are working for them.
@Path("calc/1.0")
public class CalculatorV1_0 {
  @GET
  @Consumes("text/plain")
  @Produces("text/plain")
  @Path("addTwoNumbers")
  public String add(@MatrixParam("firstNumber") int n1, @MatrixParam("secondNumber") int n2) {
    return String.valueOf(n1 + n2);
  }
}

这应该是你所需要的。如果你的Tomcat安装程序在端口8080上本地运行,并且将WAR文件部署到上下文中myContext,则将…

http://localhost:8080/myContext/rest/calc/1.0/addTwoNumbers;firstNumber=2;secondNumber=3
…应该产生预期的结果(5)。



 类似资料:
  • 我想根据“配置文件”设置注释的值。 让我举个例子来解释; 在上面的例子中,我们可以看到活动的“配置文件”是PROD,但是假设我们想要使用DEV配置文件,我们将不得不注释来自PROD的@Table注释,并取消注释DEV@Table注释。 如果这只针对一个实体,那不会是一个问题,但我有很多实体都有这种情况,所以我不认为这是处理这种即兴“简介”的方式。 你知道有什么办法可以解决这种情况吗?

  • 如何在注释中为web.XML提供注释映射。我已经完成了web.XML.我想尝试使用注释映射,如下所示:

  • 问题内容: 如何使用JAX-RS设置字符集?我试过了,但是被忽略了,只用HTTP标头发送。我想在MessageBodyWriter中设置字符集,但是不想自己通过反射来分析@Produces批注来提取媒体类型。 问题答案: 正如Daemon在评论中指出的那样,JAX-RS的最新版本(包括截至2012年9月的稳定版本)现在 确实 支持该语法。因此,您可以使用:

  • 问题内容: 如何在React组件的方法内部使用注释? 我有以下组成部分: 我的评论显示在用户界面中。 在组件的渲染方法中应用单行和多行注释的正确方法是什么? 问题答案: 因此,在方法内允许使用注释,但为了在JSX中使用它们,必须将它们用大括号括起来并使用多行样式的注释。 您可以在此处阅读有关注释如何在JSX中工作的更多信息

  • 跑步 当我用“通常的”注释器tokenize、ssplit、pos、lemma和ner运行脚本时,它们都工作得很好,但是添加quote不会改变输出。我使用stanford-corenlp-full-2015-12-09版本。我如何使用引用注释器,它意味着做什么?

  • 问题内容: JAX- RS具有用于HTTP动词的注释,例如()和(),但是没有注释。如何为HTTP动词添加注释? 类似于以下内容: 问题答案: 我在这里得到答复。 只需定义一个自定义的Patch批注,这意味着您将必须使用以下代码编写一个 PATCH.java 文件: 导入 包含PATCH.java 的 包 ,然后可以像其他HTTP方法注释一样使用它: 我使用此@PATCH将一些JSON发送到我的R