Отображение типов контента расширения в Джерси, а не в CXF - PullRequest
0 голосов
/ 18 сентября 2018

Некоторое время назад я работал над REST-сервисом, который был реализован с использованием Apache CXF.Ранее в этом году я перенес его на Джерси, но есть несовместимость, которую я не заметил в то время.

Apache CXF предоставляет удобный способ «сопоставления расширений».Клиенты оригинального сервиса были написаны, чтобы ожидать этого.Теперь мы обнаруживаем, что использование расширений в клиенте с портированной службой не работает, потому что в службе не настроено сопоставление расширений.Посмотрев некоторое время, я вижу, что Джерси не предоставляет очевидного способа сделать это.

За исключением изменения клиентов, чтобы не предоставлять расширение, каковы некоторые возможные стратегии для "исправления" этого всервис?Я совершенно уверен, что нет клиентов, которые будут использовать XML.

1 Ответ

0 голосов
/ 18 сентября 2018

Если вы используете Jersey 2.x, на самом деле - это удобный способ справиться с этим.Это свойство ServerProperties.MEDIA_TYPE_MAPPINGS .Если вы используете подкласс ResourceConfig для своей конфигурации, вы можете просто сделать

public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        packages("com.example");

        Map<String, MediaType> mappings = new HashMap<>();
        mappings.put("json", MediaType.APPLICATION_JSON_TYPE);
        mappings.put("xml", MediaType.APPLICATION_XML_TYPE);
        property(ServerProperties.MEDIA_TYPE_MAPPINGS, mappings);
    }
}

Если вы используете web.xml, вы можете сделать

<servlet>
    <servlet-name>JerseyApplication</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.example</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.mediaTypeMappings</param-name>
        <param-value>xml:application/xml, json:application/json</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
...