我在容器中有一个 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) MessageBodyReader
和 MessageBodyReader
。
如果您使用 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
类,例如 LocalDateTime
、Instant
、等,并使用 JSON-B 注释来指定如何使用 @JsonbDateFormat
关于java - 如何在 glassfish/payara REST 服务器中注册 jackson-datatype-joda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405251/