Java JAX-RS中ContextResolver的用途

Java JAX-RS中ContextResolver的用途,java,jax-rs,Java,Jax Rs,我想了解JAX-RS中上下文解析器的用途。在什么情况下我应该实现上下文解析器?有人能举例说明吗 我参考了JAX-RS 2.0规范,发现以下段落: 上下文提供程序向资源类和其他提供程序提供上下文。上下文提供程序类实现 ContextResolver接口,可以使用@Provider进行注释,以便自动发现。 例如,希望向默认JAXB实体提供自定义JAXBContext的应用程序 提供者将提供一个实现ContextResolver的类 我不知道在哪里和什么时候使用。我使用了ContextResolver

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

我参考了JAX-RS 2.0规范,发现以下段落:

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


我不知道在哪里和什么时候使用。

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

package.com.example;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.PropertyNamingStrategy;
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
@提供者
公共类ObjectMapperContextResolver实现ContextResolver{
私有最终对象映射器映射器;
公共对象MapPercontextResolver(){
映射器=新的ObjectMapper();
mapper.SetPropertyName策略(
PropertyNameingStrategy.CAMEL\u CASE\u到带下划线的\u LOWER\u CASE\u
);
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
}

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

package.com.example;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.fasterxml.jackson.databind.PropertyNamingStrategy;
导入javax.ws.rs.ext.ContextResolver;
导入javax.ws.rs.ext.Provider;
@提供者
公共类ObjectMapperContextResolver实现ContextResolver{
私有最终对象映射器映射器;
公共对象MapPercontextResolver(){
映射器=新的ObjectMapper();
mapper.SetPropertyName策略(
PropertyNameingStrategy.CAMEL\u CASE\u到带下划线的\u LOWER\u CASE\u
);
}
@凌驾
公共对象映射器getContext(类类型){
返回映射器;
}
}

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

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

您能详细说明将驼峰大小写更改为下划线的目的吗?关于它会发生什么变化?你们能详细说明一下将驼色框改为下划线的目的是什么吗?它将改变什么?
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;
    }
}