k11*_*133 5 java json camelcasing jackson jersey-2.0
我最近换了2号球衣.我浏览了文档/ web,并了解了如何使用响应类转换为自定义类.readEntity(ClassName.class);
但我坚持使用CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES命名策略.
当前转换失败,因为响应字段为"_"且我的POJO具有Snake大小写.
任何帮助将不胜感激.
在jersey1中,我一直这样做:
MyResponse myResponse = client
.resource(url)
.type(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.post(RequestClass.class, request);
Run Code Online (Sandbox Code Playgroud)
同样我无法实现post jersey 2:当我在上面的代码中时,它会产生编译时错误:
我也尝试过:
MyResponse myResponse = client
.target(getUrl())
.request()
.post(Entity.entity(request, MediaType.APPLICATION_JSON))
.readEntity(MyResponse.class);
Run Code Online (Sandbox Code Playgroud)
但它不是创建myResponse对象,因为我得到的响应有Snake_case响应,但我的POJO有驼峰字段.
这是杰克逊需要配置的东西ObjectMapper.你可以这样做ContextResolver.基本上,你需要类似的东西
@Provider
public class MapperProvider implements ContextResolver<ObjectMapper> {
final ObjectMapper mapper;
public MapperProvider() {
mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(
PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES);
}
@Override
public ObjectMapper getContext(Class<?> cls) {
return mapper;
}
}
Run Code Online (Sandbox Code Playgroud)
然后注册您的客户
client.register(MapperProvider.class);
Run Code Online (Sandbox Code Playgroud)
如果您在服务器上也需要此支持,那么您还需要在服务器上注册它.