Dropwizard ObjectMapper 不支持启用(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
Dropwizard ObjectMapper not honouring enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS)
我希望 jackson 能够解析不区分大小写的枚举。例如
public enum OperType {
SUM
PRODUCT
}
我想接受 POST 请求中的 "SUM" 和 "sum"。
我正在 Application::run 中获取 objectMapper 并启用设置:
environment.getObjectMapper().enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
但是这是没有效果的!
Jersey 不使用 Dropwizard bootstrap 的 objectMapper,尽管 Dropwizard 的官方文档可能让人相信。
需要在 Application::run 中注册自定义 ContextResolver 以使其工作:
environment.jersey().register(new ObjectMapperContextResolver(injector.getInstance(ObjectMapper.class)));
其中:
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
关于 dropwizard 生态系统的这些文档对于那些还不是很精通的人来说真的很混乱!
我希望 jackson 能够解析不区分大小写的枚举。例如
public enum OperType {
SUM
PRODUCT
}
我想接受 POST 请求中的 "SUM" 和 "sum"。
我正在 Application::run 中获取 objectMapper 并启用设置:
environment.getObjectMapper().enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
但是这是没有效果的!
Jersey 不使用 Dropwizard bootstrap 的 objectMapper,尽管 Dropwizard 的官方文档可能让人相信。 需要在 Application::run 中注册自定义 ContextResolver 以使其工作:
environment.jersey().register(new ObjectMapperContextResolver(injector.getInstance(ObjectMapper.class)));
其中:
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public ObjectMapperContextResolver(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
关于 dropwizard 生态系统的这些文档对于那些还不是很精通的人来说真的很混乱!