【问题标题】:Purpose of ContextResolver in JAX-RSJAX-RS 中 ContextResolver 的用途
【发布时间】:2016-09-20 11:42:04
【问题描述】:

我想了解 JAX-RS 中上下文解析器的用途。在什么情况下我应该实现上下文解析器?有人可以举个例子吗?

我参考了 JAX-RS 2.0 规范并在以下段落中找到:

上下文提供者为资源类和其他提供者提供上下文。上下文提供者类实现 ContextResolver 接口,并且可以使用 @Provider 进行注释以进行自动发现。 例如,希望为默认 JAXB 实体提供自定义 JAXBContext 的应用程序 提供者将提供一个实现 ContextResolver 的类。

我不知道何时何地使用。

【问题讨论】:

    标签: java jax-rs


    【解决方案1】:

    我已经使用 ContextResolver 将驼峰式大小写转换为下划线(请参见下面的示例),所以基本上您可以进行配置(就像文档状态一样)。

    package com.example;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.PropertyNamingStrategy;
    import javax.ws.rs.ext.ContextResolver;
    import javax.ws.rs.ext.Provider;
    
    @Provider
    public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
    
        private final ObjectMapper mapper;
    
        public ObjectMapperContextResolver() {
            mapper = new ObjectMapper();
            mapper.setPropertyNamingStrategy(
                    PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
            );
        }
    
        @Override
        public ObjectMapper getContext(Class<?> type) {
            return mapper;
        }
    }
    

    【讨论】:

    • 您能否详细说明将驼色套管改为下划线的目的是什么?以及它会改变什么?
    【解决方案2】:

    有时您可能对 json 绑定有特殊要求(驼峰式处理、空值处理、私有字段处理……)。您可以提供一个 ContextResolver(使用 Provider 注释您的 ContextResolver 实现),让 CDI 为您的 json 绑定拾取并使用该解析器。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多