Http конвертер сообщений Spring Boot сериализует иногда ноль - PullRequest
0 голосов
/ 07 октября 2019

В загрузке Spring я использую пользовательский GsonHttpMessageConverter в качестве компонента. Можно ли использовать несколько бинов GsonHttpMessageConverter, потому что иногда мне нужно сериализовать нулевые значения, а иногда пустые поля должны быть исключены для производительности. Это пользовательская часть GsonHttpMessageConverter. Эта часть работает нормально. Теперь мне нужно как-то расширить его, чтобы этот сервис мог динамически отправлять данные с пустыми полями или без них.

@Bean
public GsonHttpMessageConverter gsonHttpMessageConverter() {
   final GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
   converter.setGson(MapperUtil.getGsonInstance());
   return converter;
}

Мои сущности - простые pojos

public Class MyEntity {
   String col1;
   String col2;
   // getters & setters
}

1 Ответ

1 голос
/ 07 октября 2019

Для GsonHttpMessageConverter необходимо создать два bean-компонента: первый с настройками по умолчанию и второй с настройкой для сериализации нулей следующим образом:

@Bean
public GsonHttpMessageConverter gsonHttpMessageConverter() {
    return buildGsonHttpMessageConverter(MapperUtil.getGsonInstance());
}

@Bean
public GsonHttpMessageConverter gsonHttpMessageConverterWithNulls() {
    return buildGsonHttpMessageConverter(MapperUtil.getGsonInstanceSerializeNulls());
}

private GsonHttpMessageConverter buildGsonHttpMessageConverter(final Gson gson) {
    final GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
    converter.setGson(gson);
    return converter;
}

И когда вы хотите использовать один из нихзатем вызовите @Qualifier("someBean") аннотацию. следующим образом:

@Autowired
@Qualifier("gsonHttpMessageConverter")
GsonHttpMessageConverter gsonHttpMessageConverter;

@Autowired
@Qualifier("gsonHttpMessageConverterWithNulls")
GsonHttpMessageConverter gsonHttpMessageConverterWithNulls;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...