Fre*_*sen 5 json jersey jackson dropwizard
我想在Dropwizard应用程序的上下文中使用Java 8 java.time和 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,它使用了较旧的 Date API。Jersey 资源如下所示:
@Path("/example")
@Consumes(MediaType.APPLICATION_JSON)
public class ExampleResource {
@POST
public void consume(Example example) {
// Do stuff with example.date
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
JavaTimeModule在默认情况下,注册在Dropwizard 1.0.0及以上。对于以前的版本,dropwizard-java8包提供了对 Java 8 功能的支持。Java 8 是 Dropwizard 1.0.0 的基线,该包已合并到基线中。
假设您使用 Dropwizard 1.0.0 或更高版本,如果您仍然需要访问ObjectMapper,您可以在您的Application<T>:
void initialize(Bootstrap<T> bootstrap),通过bootstrap.getObjectMapper()abstract void run(T configuration, Environment environment),通过environment.getObjectMapper()这样,您可以注册其他模块,或者启用或禁用 Jackson 功能。其中一些会影响Java 8 类型的序列化和反序列化方式。
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |