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

问题描述 投票:0回答:1

我在一个容器(Payara 4)中有一个REST端点,我已经为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;
}

如何将joda序列器模块与PAYARA GLASSFISH内置的序列器进行注册?

java glassfish jodatime payara
1个回答
0
投票

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

如果你使用Java EE 8,你将得到 JSON-B (Binding),确保JSON序列化开箱即用。如果你想使用Jackson,你需要配置它(如何在Payara 5中使用杰克逊2?). 此外,您不能像Spring Boot那样获得默认的Jackson模块(如Java Time、Joda Time)的自动配置,您必须为您的Jackson模块注册。ObjectMapper 由自己来完成。

如果你的代码使用的是Java 8和Java EE 8,你也可以使用的是 java.time 诸如 LocalDateTime, Instant等,并使用JSON-B注解来指定如何使用 @JsonbDateFormat

© www.soinside.com 2019 - 2024. All rights reserved.