JAX-RS中ContextResolver的用途

时间:2016-09-20 11:42:04

标签: java jax-rs

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

我引用了JAX-RS 2.0规范,并在以下段落中找到:

  

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

我无法理解何时何地使用。

2 个答案:

答案 0 :(得分:0)

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

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;
    }
}

答案 1 :(得分:0)

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