I recently switched to jersey 2 ,.
I went through the documentation/web and got to know how to convert response class to custom class using .readEntity(ClassName.class);
But I am stuck at using CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
naming strategy.
The current conversion fails as the response fields are with "_" and my POJO has Snake case .
Any help will be appreciated.
In jersey1 , I have been doing this :
MyResponse myResponse = client
.resource(url)
.type(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.post(RequestClass.class, request);
the same I am not able to achieve post jersey 2 : It gives compile time error when I as in above code :
I also tried :
MyResponse myResponse = client
.target(getUrl())
.request()
.post(Entity.entity(request, MediaType.APPLICATION_JSON))
.readEntity(MyResponse.class);
but it's not creating myResponse
object , cause the response I get has Snake_case response but my POJO has camel case fields.
This is something that needs to be configured with the Jackson ObjectMapper
. You can do this in a ContextResolver
. Basically, you need something like
@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;
}
}
Then register with your client
client.register(MapperProvider.class);
If you need this support on the server also, then you will need to register it on the server too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With