使用Dropwizard时配置Jackson映射器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Dropwizard时配置Jackson映射器相关的知识,希望对你有一定的参考价值。
我想在Java 8 java.time app的背景下使用Dropwizard和Jersey / Jackson。我知道我需要使用jackson-modules-java8并配置映射器对象。
但是我如何配置Jersey的自动映射器,为我反序列化传入的JSON?即我会在哪里做mapper.registerModule(new JavaTimeModule());
?
为了说明当前的情况,这里有一个表示传入JSON的示例类:
public class Example {
// Want to use java.time instead
private Date date;
private final String ISO_OFFSET_DATE_TIME = "YYYY-MM-DD'T'HH:mm:ssZ";
@JsonCreator
public Example(@JsonProperty("date")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = ISO_OFFSET_DATE_TIME)
Date date) {
this.date = date;
}
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = ISO_OFFSET_DATE_TIME)
public Date getDate() {
return date;
}
}
如您所见,它使用较旧的Date API。泽西岛资源如下所示:
@Path("/example")
@Consumes(MediaType.APPLICATION_JSON)
public class ExampleResource {
@POST
public void consume(Example example) {
// Do stuff with example.date
}
}
JavaTimeModule
是Dropwizard 1.0.0及以上版本的registered by default。对于以前的版本,dropwizard-java8包提供了对Java 8功能的支持。 Java 8是Dropwizard 1.0.0的基线,而捆绑包是merged into baseline。
假设您使用Dropwizard 1.0.0或更高版本,如果您仍然需要访问ObjectMapper
,您可以在Application<T>
中执行此操作:
- 在方法
void initialize(Bootstrap<T> bootstrap)
,通过bootstrap.getObjectMapper()
- 在方法
abstract void run(T configuration, Environment environment)
,通过environment.getObjectMapper()
这样,您可以注册其他模块,或启用或禁用Jackson功能。其中一些影响how Java 8 types are serialized and deserialized。
以上是关于使用Dropwizard时配置Jackson映射器的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate AutoGenerated 值不适用于 Jackson 映射器
如何将 Spring Boot 映射器从 Jackson 交换到 kotlinx.serialization
Jackson Java 到 JSON 对象映射器修改字段名称