2016-06-01 4 views
1

私はresteasyを使用しています。ここでは、リソースを削除するコードです。残りのリクエストを削除するリクエストパラメータを渡します。

@DELETE 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/{id:\\d+}") 
public Response removeResource(@PathParam("id") int id){ 
    ......................... 
    .. code to delete resource and return Response object .. 
    ......................... 
} 

このコードは正常に動作しています。しかし、私がリクエストを削除するためにいくつかのパラメータを渡そうとするとき。私は得ていますUnsupportedMediaException

@DELETE 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
@Path("/{id:\\d+}") 
public Response removeResource(@PathParam("id") int id, Map<String, Object> source){ 
    ......................... 
    .. code to delete resource and return Response object .. 
    ......................... 
} 

何らかの理由でパラメータを送信する必要があります。さらに、deleteリクエストをputリクエストに置き換えた場合、すなわち、@DELETE@PUTに置き換えると、コードは正常に動作します。

削除要求にパラメータを渡す方法はありますか。

とフロントエンドで私は

var r = $Resource(/rest/resources/1); // for debugging purpose I made id 1 
r.remove({"key1":"data1", "key2", "data2"}); 

編集、削除要求を送信するためにangularjsの$リソースを使用していました:フロントエンド

でサーバー

11:43:25,767 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n] (default task-7) RESTEASY002010: Failed to execute: javax.ws.rs.NotSupportedException: RESTEASY003065: Cannot consume content type 
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:382) 
at org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:116) 
at org.jboss.resteasy.core.registry.RootNode.match(RootNode.java:43) 
at org.jboss.resteasy.core.registry.RootClassNode.match(RootClassNode.java:48) 
at org.jboss.resteasy.core.ResourceMethodRegistry.getResourceInvoker(ResourceMethodRegistry.java:445) 
at org.jboss.resteasy.core.SynchronousDispatcher.getInvoker(SynchronousDispatcher.java:257) 
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:194) 
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) 
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 

レスポンスから
スタックトレースを

Status Code: 415 Unsupported Media Type 
Connection: keep-alive 
Content-Length: 0 
Date: Wed, 01 Jun 2016 06:13:25 GMT 
Server: WildFly/10 
x-powered-by: Undertow/1 
+0

Angular issueあなたはまた、いくつかのサーバにはない完全なスタックトレース –

+0

を表示することができます参照して詳細情報については、削除要求

var r = $Resource(/rest/resources/1, {}, remove:{ method:"DELETE", isArray:false, headers:{'Content-Type':'application/json; charset=UTF-8'} } ); 

のためのContent-Typeを含めるようにリソース定義を変更することができるはずですDELETEで本体をサポートします。 'UnsupportedMediaException'はRESTEasy例外のように聞こえるが、アプリケーションレベルでエラーが起きている。私はこれに関するRESTEasyのルールはかなりわかりません。最悪の場合、クエリパラメータでデータを送信するだけです。 –

+0

@peeskillet Webサーバーのスタックトレースとフロントエンドの応答を追加しました – afzalex

答えて

1

Content-Typeが "application/json"であることを要求しました AngularJS defaults to text/plain。

新しいバージョンのAngularJS(1.1.3)を使用している場合は、要求したContent-Typeを含むようにリソースオブジェクトをカスタマイズできます。 あなたはAnswer One

関連する問題