Spring-Boot Jersey:允许 Jersey 提供静态内容

2024-01-07

该应用程序使用 JDK 8、Spring Boot 和 Spring Boot Jersey 启动器,并打包为 WAR(尽管它是通过 Spring Boot Maven 插件在本地运行)。

我想做的是将我动态(在构建时)生成的文档作为欢迎页面。

我尝试了几种方法:

  1. 让 Jersey 通过配置来提供静态内容application.properties 正确的初始化参数 https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jersey/JerseyProperties.java#L61如上所述here https://stackoverflow.com/questions/12422660/jersey-servlet-mapping-causes-404-error-for-static-resources
  2. 介绍一个metadata-complete=false web.xml以便将生成的 HTML 文档列为欢迎文件。

这些都没有成功。

我想避免必须启用 Spring MVC 或创建 Jersey 资源只是为了提供静态文件。

任何想法?

这是 Jersey 配置类(我尝试添加一个但没有成功)ServletProperties.FILTER_STATIC_CONTENT_REGEX there):

@ApplicationPath("/")
@ExposedApplication
@Component
public class ResourceConfiguration extends ResourceConfig {

   public ResourceConfiguration() {
      packages("xxx.api");
      packages("xxx.config");
      property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
      property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
   }
}

这是 Spring Boot 应用程序类(我尝试添加一个application.properties with spring.jersey.init.jersey.config.servlet.filter.staticContentRegex=/.*html但它不起作用,我不太确定这里的属性键应该是什么):

@SpringBootApplication
@ComponentScan
@Import(DataConfiguration.class)
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

首先我要声明,静态内容不会被提供的原因是 Jersey servlet 的默认 servlet 映射,即/*,并占用所有请求。因此无法访问提供静态内容的默认 servlet。除了下面的解决方案之外,另一个解决方案是简单地更改 servlet 映射。您可以通过注释您的ResourceConfig子类与@ApplicationPath("/another-mapping")或设置application.properties财产spring.jersey.applicationPath.


关于您的第一种方法,请看一下球衣ServletProperties https://jersey.github.io/apidocs/2.26/jersey/org/glassfish/jersey/servlet/ServletProperties.html。您尝试配置的属性是FILTER_STATIC_CONTENT_REGEX https://jersey.github.io/apidocs/2.26/jersey/org/glassfish/jersey/servlet/ServletProperties.html#FILTER_STATIC_CONTENT_REGEX。它指出:

该属性仅在 Jersey servlet 容器配置为作为 Filter 运行时适用,否则该属性将被忽略

Spring Boot 默认将 Jersey servlet 容器配置为 Servlet(如前所述here http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-jersey):

默认情况下,Jersey 将被设置为 Servlet@Bean类型的ServletRegistrationBean named jerseyServletRegistration。您可以通过创建您自己的同名 bean 来禁用或覆盖该 bean。您还可以通过设置使用 Filter 而不是 Servletspring.jersey.type=filter(在这种情况下@Bean替换或覆盖是jerseyFilterRegistration).

所以只需设置属性spring.jersey.type=filter在你的application.properties,它应该可以工作。我已经测试过这个。

仅供参考,无论配置为 Servlet Filter 还是 Servlet,就 Jersey 而言,功能都是相同的。

顺便说一句,而不是使用FILTER_STATIC_CONTENT_REGEX,当您需要设置一些复杂的正则表达式来处理所有静态文件时,您可以使用FILTER_FORWARD_ON_404 https://jersey.github.io/apidocs/2.26/jersey/org/glassfish/jersey/servlet/ServletProperties.html#FILTER_FORWARD_ON_404。这实际上是我用来测试的。我刚刚将其设置在我的ResourceConfig

@Component
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        packages("...");
        property(ServletProperties.FILTER_FORWARD_ON_404, true);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring-Boot Jersey:允许 Jersey 提供静态内容 的相关文章

  • Spring Kafka - 如何使用 @KafkaListener 重试

    来自推特的问题 只是想找到一个使用 spring kafka 2 1 7 的简单示例 该示例与 KafkaListener 和 AckMode MANUAL IMMEDIATE 一起使用 以重试上次失败的消息 https twitter c
  • 为什么byteArray的长度是22而不是20?

    我们尝试从字符串转换为Byte 使用以下 Java 代码 String source 0123456789 byte byteArray source getBytes UTF 16 我们得到一个长度为 22 字节的字节数组 我们不确定这个
  • IntelliJ Ultimate 在 Play 2.3 (Java) 项目测试中找不到路由

    虽然我的测试运行得很好 但 IntelliJ 抱怨它找不到路由对象 并且代码自动完成无法工作 我已经查看了所有文档 这应该可以工作 这是 IntelliJ 的报告内容 关于我的项目配置可能有什么问题有什么想法吗 这很可能与以下事实有关 ro
  • 术语“引用”的起源,如“通过引用传递”

    Java C 语言律师喜欢说他们的语言按值传递引用 这意味着 引用 是调用函数时复制的对象指针 同时 在 C 中 以及 Perl 和 PHP 中更动态的形式 引用是其他名称 或动态情况下的运行时值 的别名 我对这里的词源感兴趣 参考 一词的
  • 通过 JDBC 连接到 DB2 时的用户和密码

    我正在尝试连接到本地 DB2 10 5 Express C 服务器 这是一个测试环境 所以我不关心安全性 我能够连接到命令行处理器 在 Windows 上运行 并且我更改了配置设置AUTHENTICATION CLIENT and TRUS
  • Maven 2 未运行 Junit 4 测试

    我在确保运行 Junit4 测试时遇到问题 同样的问题也被报告在https stackoverflow com questions 2021771 sort newest sort top https stackoverflow com q
  • 实体创建无用的 id 字段

    我有一个CrudRepository与两个实体 Problem 特征实体总是创建一个附加的id数据库中的字段但未选择正确的characteristic id要生成的字段JSON machine entity machine id name
  • JFreeChart - 创建移动图表时出现问题

    我在我的 java 应用程序中使用 JFreeChart Problem 我想绘制一个XY面积图 whose 域轴 x 轴 当我们开始绘制数据时应该自动水平滚动 我在中看到了同样的事情时间序列图表但我不想要任何时间系列图表 我只想要滚动的
  • 如何使 ScheduledExecutorService 在计划任务取消时自动终止

    我正在使用一个ScheduledExecutorService如果网络连接已打开超过几个小时 则关闭该连接 然而 在大多数情况下 网络连接在超时之前就关闭了 所以我取消了ScheduledFuture 在这种情况下 我还希望执行程序服务终止
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • 整数与 int 比较

    我是新来的java 我现在正在学习非原始整数类型java 我知道以下比较无效并引发编译错误 String str c Char chr c if str chr return true 上面的代码片段给了我 Test java lineNu
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • “未找到 JAVA 路径。请检查 JAVA 是否已安装。”初始化 RSelenium 时出错

    我正在尝试启动一个 RSelenium 会话到 webscrape 但是 当运行此代码时 driver lt rsDriver browser c chrome chromever 76 0 3809 126 port 4444L 我收到此
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • Java XML 解析器添加不必要的 xmlns 和 xml:space 属性

    我在 Windows 10 上使用 Java 11 AdoptOpenJDK 11 0 5 2019 10 15 我正在解析一些旧版 XHTML 1 1 文件 这些文件采用以下一般形式
  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 用 lambda 表达式替换匿名函数

    我在 Java 8 映射操作中传递一个函数 Intellij 告诉我它可以用 lambda 表达式替换 但我不知道如何在不创建中间对象结构的情况下做到这一点 这就是我所做的 List

随机推荐

  • 在打开文件进行写入之前递归创建目录

    我需要写入一个文件 截断 并且它本身所在的路径可能不存在 例如 我想写信给 tmp a b c config but tmp a本身可能不存在 然后 open tmp a b c config w 显然 这是行不通的 因为它没有创建必要的目
  • Maven 程序集插件模块集源指令不包含任何文件并且与包含的模块不匹配

    我有一个多模块 Maven 项目 我正在尝试让程序集插件的模块集源部分正常工作 我有模块 模块父模块 module a and 模块组件 module a and 模块组件是的孩子模块父模块 模块组件已声明 pom 依赖项module a
  • 如何从 vcpkg 检索 cmake 目标名称?

    安装软件包后 vcppkg 非常有帮助地显示相关的 CMake 目标 libwebp x64 windows 包提供了 CMake 目标 find package WebP CONFIG REQUIRED target link libra
  • 相当于hadoop中mongo的out:reduce选项

    我正在重写 MongoDB 映射缩减作业以使用 Hadoop 使用 mongo hadoop 连接器 但是当我将两个数据集映射到同一个集合时 它会覆盖这些值而不是使用它们 reduce collectionName 如果结果集中和旧集合中存
  • 在 R 中制作分区统计图:合并来自多个州的邮政编码形状文件

    受到这里帖子的激励 使用 R 开发地理专题图 https stackoverflow com questions 1260965 developing geographic thematic maps with r 我正在考虑构建基于邮政编
  • 从 ActiveRecord/Rails 查询中检索单个记录

    我发出如下查询 精确检索 0 或 1 条记录 car Car where vin 1234567890abcdefg 返回的当然是长度为 1 的汽车列表 所以我最终添加 first在查询末尾 car Car where vin 123456
  • 在 UITabBarController 上的选项卡之间共享背景视图

    是否可以在 UITabBarController 上的选项卡之间具有相同的背景 而不必在所有视图上设置相同的背景 我想在后台放置一个视图 定期执行非常短的非资源密集型动画 切换选项卡时 我希望该动画能够持续存在 我已经阅读了如何为 UINa
  • JavaScript 中的节点是什么?

    我想知道 JavaScript 中的节点到底是什么 如函数中所示 element nodeType row parentNode removeChild row 在这种情况下 节点 只是一个 HTML 元素 DOM 是代表网站 HTML 的
  • Fiware Ultralight 2.0 IoTAgent:如何从设备发送测量?

    我正在研究一个 POC 使用 Fiware 平台创建智能城市物联网项目 我正在尝试运行端到端流程 我正在运行以下 Docker 容器 容器 ID 端口名称 24f036202f78 0 0 0 0 4041 gt 4041 tcp 0 0
  • 如何为自定义 Java 标记添加 Eclipse 快速修复?

    我想向 Eclipse 的问题视图报告 Java 文件的自定义问题并为它们提供快速修复 标准方法是使用扩展点org eclipse core resources markers声明自定义标记并通过调用添加标记org eclipse core
  • 在 VS 设计器中加载包时禁用 SSIS 包验证

    我有一些部署到 SQL 2005 Server 的 SSIS 包 随后在 Visual Studio 2003 中设计和维护 当我打开任何 BIDS 项目以及其中一个包时 设计器总是验证每个数据流和任务目的 通常 这不是问题 但是 在某些情
  • Jasmine单元测试observable订阅不触发

    我将 Angular 5 与 Jasmine 和 Karma 一起使用 我正在尝试测试某个功能是否有效 但我的订阅在单元测试期间没有触发 这导致我的单元测试失败 因为我正在使用 jasmine 的 did 函数 我想让这个单元测试成功 我已
  • Tomcat 中的 NIO 连接器

    我试图通过配置 server xml 文件在 Tomcat 6 0 中启用 NIO 连接器 但我得到Firefox 无法与位于 localhost 8081 的服务器建立连接 每当我输入时在浏览器中本地主机 8081 这就是我在 Tomca
  • DataGridTextColumn - 如何绑定IsReadonly?

    在 Silverlight 4 中 DataGridTextColumn 的 IsReadOnly 属性似乎不是依赖属性 因此我无法将它绑定到视图模型上的属性 似乎唯一的选择是使用 DataTemplate 但即使在这里我也面临两个主要问题
  • 用循环填充矩阵

    我正在尝试创建一个矩阵n by k with kmvn 使用循环进行协变量 非常简单 但到目前为止还没有工作 这是我的代码 n 1000 k 5 p 100 mu 0 sigma 1 x matrix data NA nrow n ncol
  • 如何在 laravel eloquent 中添加两列值并执行 where 条件

    这是我的桌子 id remaining amount additional amount 1 200 0 2 100 100 3 300 100 4 200 50 我正在尝试获取总和为剩余数量 额外金额 gt 0 result this g
  • 响应 SwiftUI 中的按键事件

    我想响应按键 例如esc键在 macOS OSX 上 以及在 iPad 上使用外部键盘时 我怎样才能做到这一点 我想过用 available available与 SwiftUI 的onExitCommand https developer
  • 一行中没有所有 True 值的布尔数组

    I have numpy array np random seed 100 mask np random choice True False size 10 3 print mask True True False False False
  • 如何在 git url 的用户名或密码中转义“@”

    在命令行上推送到 git 的格式之一是 Url format https username password github com owner repo 我的挑战是用户名和密码 这是我无法控制的共享帐户 包含 在他们里面 实际上都是 在这种
  • Spring-Boot Jersey:允许 Jersey 提供静态内容

    该应用程序使用 JDK 8 Spring Boot 和 Spring Boot Jersey 启动器 并打包为 WAR 尽管它是通过 Spring Boot Maven 插件在本地运行 我想做的是将我动态 在构建时 生成的文档作为欢迎页面