Доступ к Jackson Object Mapper в RestEasy

Меня попросили украсить стандартный Jackson JSON, исходящий из конечной точки RestEasy. Я провел некоторое исследование Jackson и написал отдельный код, чтобы иметь возможность подавлять нули, настраивать форматы данных и т.д. Теперь проблема заключается в том, чтобы внедрить этот код в JSON-сериализацию RestEasy.

Судя по сообщениям на форуме, это тривиально в Spring, но не похоже на то, что это так в RestEasy. Я написал ContextResolver и настроил его как resteasy.provider в контекстных параметрах в web.xml (на Tomcat), но это не позволяет webapp загружаться на Tomcat.

Теперь я пытаюсь расширить javax.ws.rs.core.Application и предоставить ContextResolver, но ничего не получается. Так ли это просто, делал ли кто-нибудь это? Любая помощь будет высоко оценена.

27
задан Daniel Serodio 22 March 2013 в 22:42
поделиться

2 ответа

Хорошо, я понял это, я смог сделать это, написав собственный JacksonJsonProvider на основе FAQ по Джексону: JAX-RS . Код выглядит следующим образом:

@Provider
public class QBOJacksonJsonProvider extends JacksonJsonProvider {
    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    @Override
    public void writeTo(Object value, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException {
        Log.info(getClass(), "In custom JSON provider");
        //get the Object Mapper
        ObjectMapper mapper = locateMapper(type, mediaType);
        // Suppress null properties in JSON output
        mapper.getSerializationConfig().setSerializationInclusion(org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion.NON_NULL);
        // Set human readable date format
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        mapper.getSerializationConfig().setDateFormat(sdf);

        super.writeTo(value, type, genericType, annotations, mediaType, httpHeaders, entityStream);
    }
}
15
ответ дан 28 November 2019 в 05:34
поделиться

Поставщик для Джексона ObjectMapper должен быть стандартным способом JAX-RS для этого (работает с Джерси), так что, похоже, также стоит использовать RESTeasy.

2
ответ дан 28 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: