当前位置: 首页 > 知识库问答 >
问题:

杰克逊与JodaTime和Jax-rs

於永寿
2023-03-14

我在Java创建了一个REST网络服务。我使用Joda-time作为日期,使用Jackson作为JSON格式。所有内容都上传到Glassfish 4.1服务器上。

  • avax.ws.rs-api-2.0.1.jar
  • joda-time-2.7.jar
  • jackson-annotation-2.8.8.jar
  • jackson-core-2.8.8.jar
  • jackson-databind-2.8.8.jar
  • jackson.datatype-joda-2.8.8.jar
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper>{

    final ObjectMapper mapper = new ObjectMapper();

    public ObjectMapperContextResolver() {
        mapper.registerModule(new JodaModule());
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }  
}

java.lang.NoSuchField错误:WRITE_DURATIONS_AS_TIMESTAMPS

我已经发现它可能在不同版本之间不匹配。所有的 jar 都来自 maven 存储库,我每次都获取所需的依赖项。

我少了什么?是不是少了库?是不是库的版本不对?

注意:我没有使用梅文

我试图更新jackson-?。glassfish4.1/glassfish/modules中的jars,但现在我甚至无法启动服务器,因为需求与jackson版本不匹配

有没有办法使用我项目中的jackson库而不是Glassfish中的那个?这似乎是解决办法。


共有1个答案

宣冥夜
2023-03-14
匿名用户

有没有办法使用我项目中的Jackson库而不是Glassfish中的库?这似乎就是解决办法。

请参阅《玻璃鱼 4 应用程序开发指南》第 2 章中的以下引文:

Java Servlet 规范建议 Web 模块的类装入器在委托给其父级之前先在本地类装入器中查找。您可以通过在玻璃鱼网的类装入器元素中设置委托=“false”来使此类装入器遵循 Servlet 规范中的委托反转模型.xml。仅对不与任何其他模块交互的 Web 模块执行此操作是安全的。[...]

缺省值为委托=“true”,这会导致 Web 模块的类装入器以与其他类装入器相同的方式进行委托。必须对访问 EJB 组件或充当 Web 服务客户机或endpoint的 Web 应用程序使用委托 =“true”。[...]

对于许多软件包,包括java*和javax*,符号解析始终委托给父类加载器,而不管委托设置如何。这可以防止应用程序覆盖核心Java运行时类或更改作为JavaEE平台一部分的规范的API版本。

在《GlassFish 4应用程序部署指南》的B部分中,您将看到一个GlassFish web的示例。xml部署描述符。根据您的问题定制您的玻璃鱼网页。xml文件如下:

<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD
GlassFish Application Server 3.1 Servlet 3.0//EN"
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <class-loader delegate="false" />
</glassfish-web-app>

然后将其放在Web模块的WEB-INF下。

 类似资料:
  • 问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要

  • 我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A

  • 首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不

  • 我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似

  • 问题内容: Spring MVC 3.1与Jackson 2.0兼容吗?Spring MVC在类路径上自动检测Jackson并将其委托给Jackson以JSON内容类型的请求是否仍然有效? 问题答案: 在Spring 3.2中添加了对Jackson 2的支持,并且还向后移植到了Spring 3.1.2(SPR-9507)

  • 我试图能够定义以下代码: 我知道我需要使用: 要正确设置对象映射器,以便能够在rest资源上接受单个值作为数组。我成功地安装了那个部件。 我对这种方法的问题是,以下内容是不可区分的: 和 将产生一个大小为1的列表。然后,在方法create(List myObjects)中,我将无法区分List和发送到Rest资源的单个对象。 那么,我的问题是如何做到这一点。我们的想法是只有一个@POST同时接受数