Джерси JSON переключается с верблюжьего регистра на символы подчеркивания (змеиный регистр)

Я недавно перешел на майку 2,. Я просмотрел документацию/веб и узнал, как преобразовать класс ответа в пользовательский класс, используя .readEntity(ClassName.class);

Но я застрял в использовании стратегии именования CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES.

Текущее преобразование завершается неудачно, так как поля ответа содержат «_», а мой POJO имеет Snake case .

Любая помощь будет оценена.

В jersey1 я делал это:

MyResponse myResponse = client  
        .resource(url)
        .type(MediaType.APPLICATION_JSON)
        .accept(MediaType.APPLICATION_JSON)
        .post(RequestClass.class, request);

то же самое я не могу получить после публикации 2: это дает ошибку времени компиляции, когда я, как в приведенном выше коде:

Я также пробовал:

MyResponse myResponse = client
        .target(getUrl())
        .request()
        .post(Entity.entity(request, MediaType.APPLICATION_JSON))
        .readEntity(MyResponse.class);

но он не создает объект myResponse, потому что ответ, который я получаю, имеет ответ Snake_case, но мой POJO имеет поля case верблюда.


person k1133    schedule 15.04.2016    source источник
comment
Пожалуйста, покажите мне реальный код   -  person André Schild    schedule 15.04.2016


Ответы (1)


Это то, что нужно настроить с помощью файла Jackson 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;
    }
}

Тогда зарегистрируйтесь с вашим клиентом

client.register(MapperProvider.class);

Если вам нужна эта поддержка и на сервере, то вам нужно будет зарегистрировать ее и на сервере.

person Paul Samsotha    schedule 17.04.2016
comment
это решило это. Спасибо :) не могу проголосовать за ответ из-за низкой репутации :( - person k1133; 19.04.2016