java - 如何在 glassfish/payara REST 服务器中注册 jackson-datatype-joda

标签 java glassfish jodatime payara

我在容器中有一个 REST 端点 (Payara 4)
我已将 joda 序列化扩展的依赖项添加到 pom.xml。

<dependency>
     <groupId>com.fasterxml.jackson.datatype</groupId>
     <artifactId>jackson-datatype-joda</artifactId>
     <version>2.10.3</version>
</dependency>

但是我的项目序列化不正确。

"dt":{"chronology":{},"millis":1499896800000}

我知道我需要使用 jackson-databind-joda,但我不确定如何在 PAYARA 中正确注册。有 Spring Boot 的示例,但没有针对旧应用程序服务器的示例?

@Path("bom")
@Stateless
public class ProductionMaterialRestEndpoint {

    @POST
    @Path("kw/compare/{year}/{week}")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public ResultContainingDateTime compare(
            @PathParam("year") int year,
            @PathParam("week") int week) throws IOException, ExecutionException {

            ...               
    }    
}


public class ResultContainingDataTime {
    private org.joda.time.DateTime dt;
}

如何使用 PAYARA/GLASSFISH 内置的序列化器注册 joda 序列化器模块

最佳答案

JAX-RS 基本上是 specification关于如何在 Java EE 中编写 REST Web 服务。它没有指定使用哪种技术来序列化消息,只指定了接口(interface) MessageBodyReaderMessageBodyReader

如果您使用 Java EE 8,您将获得 JSON-B (绑定(bind))确保 JSON 序列化开箱即用。如果您想使用 Jackson,则需要配置它( How to use Jackson 2 in Payara 5? )。此外,您无法像 Spring Boot 一样获得 Jackson 模块(例如 Java Time、Joda Time)的默认自动配置,并且必须通过以下方式为您的 ObjectMapper 注册它们:你自己。

如果您的代码使用 Java 8 和 Java EE 8,您还可以使用 java.time 类,例如 LocalDateTimeInstant、等,并使用 JSON-B 注释来指定如何使用 @JsonbDateFormat

序列化这些值

关于java - 如何在 glassfish/payara REST 服务器中注册 jackson-datatype-joda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405251/

相关文章:

java - JPA @ManyToOne 连接表问题

Android - 使用 Joda Time 时无法使用 Proguard 导出 apk

java - 请帮我理解这段Java代码

web-services - EJB3 远程 vs Web 服务,性能如何?

java - jsp中迭代ArrayList时出现NullPointerException

java - IDEA 官方指南中的 arquillian 运行时问题

使用 joda 日期时间的 Scala 日期时间转换

java - 将表示为包含时区名称 ('z' 的字符串的时间转换为 UTC 时间

java - 使用用户输入迭代 While 循环

java - 如何使用hibernate查询语言查找两个时间戳之间的差异