我在一个容器(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内置的序列器进行注册?
JAX-RS基本上是 规格 关于如何在Java EE中编写REST Web服务。它并没有指定使用哪种技术来序列化消息,而只是指定了接口。MessageBodyReader
和 MessageBodyReader
.
如果你使用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