2015-11-02 11 views
1

Я создаю веб-сервис для отдыха, и я хочу использовать объект json/xml. Я использую трикотаж, и когда я пытаюсь отправить запрос, я получаю неподдерживаемый тип носителя 415. Вот ПОМ зависимостьДжерси 2.22 и json неподдерживаемый тип носителя

<dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.22</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
     <version>2.22</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.22</version> 
    </dependency> 

web.xml

servlet> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <servlet-class> 
     org.glassfish.jersey.servlet.ServletContainer 
    </servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      provider packages 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value> 
      org.glassfish.jersey.media.multipart.MultiPartFeature; 
      org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature, 
      org.glassfish.jersey.jackson.JacksonFeature 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

и вебсервис

@POST 
@Path("FooPath") 
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public void insertFoo(FooClass fc){ 
    System.out.println(fc.getFoo()); 
} 

кто может мне помочь?

+0

так как вы отправляете запрос? Его контент-тип, вероятно, не xml и json. – wero

+0

для теста i отправляет запрос с html-страницей. это простая форма с этим методом value = "post" enctype = 'application/json' – Luca

ответ

1

Вы пытаетесь отправить запрос application/json, используя форму отправить с помощью формуляров enctype, установленных на application/json.

К сожалению enctype поддерживает только these values:

  • application/x-www-form-urlencoded (по умолчанию)
  • multipart/form-data
  • text/plain (в HTML5)

браузер молча игнорирует ENCTYPE и вы сервер отклоняет запрос, так как это, скорее всего, application/x-www-form-urlencoded.

Для того чтобы отправить запрос как json, вам необходимо создать соответствующий запрос Ajax из Javascript. Вот как это сделать: example.

+0

@Luca Я думаю, вы должны сначала проверить (например, с помощью Firebug), что тип содержимого в вашем исходном запросе не был предназначен для приложения/json 'как я проанализировал. Это и заканчивает этот вопрос. Если у вас возникли проблемы с получением запроса Ajax, вы должны отправить новый вопрос. – wero

+0

Я попытался с этим, но не работает var frm = $ (document.myform); var dat = JSON.stringify (frm.serializeArray()); предупреждение («Я собираюсь отправить это сообщение: \ n \ n" + dat); $ .post ( frm.attr ("действие"), DAT, функция (данные) { оповещения ("ответ:" + данные); } ); – Luca

+0

ОК спасибо, я попытаюсь проанализировать запрос – Luca

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