2010-10-21 1 views
1

как вернуть правильное представление, основываясь на URIДжерси формат остальные веб-сервисы множественным

например

/text.json должен возвращать JSON

/text.xml должен возвращать XML

/текст должен возвращать обычный текст

Все они сопоставлены с тем же методом

@GET общественности Контакт getContacts() {

}

+0

Если вы создаете веб-сервис в противоположность к пользователю, которому требуется обслуживание, вам может понадобиться обсудить согласование типа контента (@Produces аннотация в JAX-RS). Это оставило бы вас с одним uri/текстом и типом контента, который будет объявлен в заголовках запроса (это больше RESTful aproach). – Jonas

ответ

3

Ответ можно найти в этом посте: http://jersey.576304.n2.nabble.com/extension-custom-negotiation-td3078866.html

По сути вы настраиваете ResourceConfig https://jersey.dev.java.net/nonav/apidocs/1.1.0-ea/jersey/com/sun/jersey/api/core/ResourceConfig.html

Вам требуется расширить реализация ResourceConfig [1] и переопределить метод сопоставления типов медиа.

Например, вы можете сделать следующее:

package foo; 

public class MyResourceConfig extends PackagesResourceConfig { 
    public PackagesResourceConfig(Map<String, Object> props) { 
     super(props); 
    } 

    public Map<String, MediaType> getMediaTypeMappings() { 
     Map<String, MediaType> m = new HashMap<String, MediaType>(); 
     m.put("json", MediaType.APPLICATION_JSON_TYPE); 
     m.put("xml", MediaType.APPLICATION_XML_TYPE); 
     return m; 
    } 
} 

и вы можете зарегистрировать свой "MyResourceConfig", как описано здесь:

https://jersey.dev.java.net/documentation/1.1.0-ea/user-guide.html#d4e115

В приведенном выше примере ваш web.xml нужно будет к контейнеру:

<web-app> 
    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>foo.MyResourceConfig</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>org.foo.rest;org.bar.rest</param-value> 
     </init-param> 
    </servlet> 
    .... 
Смежные вопросы