2016-01-11 4 views
1

Я хочу обновить версию майка до 2.x от 1.x. В моем коде я имел:Миграция JSONJAXBContext jersey 1.x to 2.x

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class JAXBContextResolver implements ContextResolver<JAXBContext> { 
private static final Class<?>[] classes = { 
     A.class, B.class, C.class, D.class, E.class, 
     F.class, G.class 
}; 
private JAXBContext context; 

public JAXBContextResolver() throws Exception { 
    context = new JSONJAXBContext(JSONConfiguration.natural() 
      .humanReadableFormatting(true).rootUnwrapping(true).build(), 
      classes); 
} 

public JAXBContext getContext(Class<?> objectType) { 
    return context; 
} 
} 

Но JSONJAXBContext и JSONConfiguration не определены в джерси 2.x. Как я могу внести изменения соответственно?

Вопрос Where did JSONConfiguration go in Jersey 2.5.x? не отвечает на мой вопрос, потому что это не объясняет, как добавить свой класс, который я хочу, чтобы вернуться в качестве выходного

+0

Возможный дубликат [Где JSONConfiguration идти в Джерси 2.5.x?] (http://stackoverflow.com/questions/21220760/where-did-jsonconfiguration-go-in-jersey-2-5-x) – jah

+0

@jah не очень полезно, так как это loo ks, как использование совершенно другого подхода –

ответ

0

Там нет необходимости в этом. Вы либо собираетесь использовать MOXy или Jackson в качестве вашего поставщика JSON в Jersey 2.x. Для последнего вы настраиваете MoxyJsonConfig. Для Джексона вы используете ObjectMapper. Укажите, какой поставщик вы используете, и настройте соответствующий объект. Оба могут быть настроены в ContextResolver, как вы сейчас делаете.

Насколько текущих конфигураций

  1. Вам не нужно настраивать какие-либо классы с любым из них.
  2. По умолчанию неразделенные объекты сериализуются.
  3. И довольно печати вы могли бы сделать следующее

    Джексон

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
    

    Moxy

    MoxyJsonConfig config = new MoxyJsonConfig() 
         .setFormattedOutput(true); 
    
+0

Что вы подразумеваете под Unwrapped objects? Так что я могу использовать этот пример ObjectMapperProvider, и я хорош? –

+0

'{" ObjectType ": {" key ":" value "}}' == wrapped root value. '{" key ":" value "}' == не завернутый. Я вижу, что у вас есть конфигурация, чтобы развернуть значение root, поэтому я упомянул об этом. Естественная реализация для Jersey 1.x заключалась в ее завершении. –

+0

Но в любом случае, глядя на ваш другой вопрос, похоже, вы используете jettison в качестве провайдера. Я не совсем уверен, как это настроить, и я бы рекомендовал вместо этого использовать Джексона. Вы можете изменить 'jersey-media-json-jettison' на' jersey-media-json-jackson', тогда да, вы можете использовать 'ContextResolver ' –

Смежные вопросы