Johnzon по умолчанию зарегистрирован на шине, чтобы иметь поставщика JSON (сопоставление) и JSON-P по умолчанию. CXF достаточно умен, чтобы сделать поставщиков шин с более низким приоритетом, чем у приложений (register() для клиентского API), поэтому, если вы вызываете register, вы ожидаете использовать jackson... и все еще использовать johnzon - я подозреваю, что это тот случай, когда вы попали.
Это совершенно нормально и связано с двумя вещами:
- Определение приоритета спецификации JAX-RS
- Джексон потребляет/производит определение
Подводя итог (1), говорится, что более конкретный провайдер имеет более высокий приоритет, поэтому провайдер «application/json» будет иметь преимущество в пользу «/».
Чтобы избежать проблем, Джонзон использует «application/json». Однако Джексон использует собственную стратегию сопоставления и поэтому использует "/". Таким образом, приоритет шины игнорируется, поскольку приоритета медиатипа достаточно, чтобы сказать, что johnzon «более адаптирован», чем jackson для json.
Чтобы решить эту проблему, проще всего переопределить провайдера jackson (просто расширить его) и украсить его @Provides
/@Consumes
с MediaType.APPLICATION_JSON
вместо подстановочного знака.
person
Romain Manni-Bucau
schedule
12.08.2016
client.register(com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider.class);
- person ulab   schedule 12.08.2016