在Jersey而不是CXF中映射扩展内容类型

时间:2018-09-17 22:01:24

标签: jersey

很早以前,我从事使用Apache CXF实施的REST服务。今年早些时候,我将其移植到了泽西岛,但当时我没有注意到这种不兼容性。

Apache CXF提供了一种方便的方式来进行“扩展映射”。原始服务的客户被期望这样做。现在,我们发现无法在客户端中将带有扩展服务的扩展名与已移植的服务一起使用,因为扩展名映射未在该服务中配置。环顾了一会后,我发现泽西岛没有提供明显的方法。

将客户端更改为不提供扩展的简短方式,在服务中“修复”此扩展的可能策略有哪些?我相当确定没有客户端会使用XML。

1 个答案:

答案 0 :(得分:1)

假设您使用的是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>