2015-11-02 73 views
1

我正在創建一個休息Web服務,並且我想消費一個json/xml對象。我使用球衣,當我嘗試發佈請求時,我獲得了415錯誤unsopported媒體類型。 這裏是POM依賴Jersey 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> 

和web服務

@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

爲測試我發佈請求與html頁面。這是一個簡單的形式與此值method =「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)

瀏覽器自動忽略的加密類型和你的服務器拒絕因爲它很可能是application/x-www-form-urlencoded

爲了以json的形式發送請求,你需要從Javascript創建一個合適的Ajax請求。這是一個example如何做到這一點。

+0

@Luca我認爲你應該首先驗證(例如使用Firebug)你的原始請求中的內容類型不是預期的'application/json就像我分析的那樣。這結束了這個問題。如果您在使用Ajax請求時遇到問題,您應該發佈一個新問題。 – wero

+0

我嘗試過但不起作用 var frm = $(document.myform); var dat = JSON.stringify(frm.serializeArray()); alert(「我準備發佈這個:\ n \ n」+ dat); $ .POST( frm.attr( 「動作」), DAT, 功能(數據){ 警報( 「響應:」 +數據); } ); – Luca

+0

好的謝謝,我會盡力分析請求 – Luca

相關問題