我想了解JAX-RS中上下文解析器的目的。在什么情况下我应该实现上下文解析器?有人可以举例说明吗?
我引用了JAX-RS 2.0规范,并在以下段落中找到:
上下文提供程序为资源类和其他提供程序提供上下文。上下文提供程序类实现
ContextResolver接口,并可以使用@Provider进行注释以进行自动发现。
例如,希望向默认JAXB实体提供自定义JAXBContext的应用程序
提供程序将提供一个实现ContextResolver的类。
我不知道在哪里和何时使用。
最佳答案
我已经使用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;
}
}