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 生态系统的这些文档对于那些还不是很精通的人来说真的很混乱!