1

PostReplaceFilterの使用に問題があります。HTMLフォームから送信されたPOSTリクエストをPUTリクエストでオーバーライドしようとしています。ドキュメントによると、Jersey 1.10(私が使用している)の場合、オーバーライドを通知するために必要なのは、リクエストHEADER( "X-HTTP-Method-Override")またはクエリパラメーター"_method"のいずれかのみです。「_method」方式を使用することを選択しましたが、まったく機能しません。

これが私のHTMLフォームです:

<!DOCTYPE html>
<html>
    <head>
        <title>New comment</title>
    </head>
    <body>
        <form action="http://localhost:3030/booklet/clusters/4eec2b6c0364ddde9ad0a82a/comments/COMM5372363818493721528" method="POST">
          <input name="_method" type="hidden" value="PUT" />
          <TEXTAREA NAME="content" COLS=40 ROWS=6>"fafafdfdsgdsg"</TEXTAREA>
          <input type="submit" value="Update" />
        </form>
    </body>
</html>

これが私のリソースです:

@PUT
@Path("/{id}/comments/{comment_id}")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void updateComment(
            @PathParam("id") String id,
            @PathParam("comment_id") String commentId,
            @FormParam("content") String content,
            @Context HttpServletResponse servletResponse
            ) throws IOException {
    Comment comment = new Comment();
    comment.setId(commentId);
    comment.setContent(content);        
    dao.updateOrCreateComment(comment);
    String requestURL = uriInfo.getBaseUriBuilder().build().toURL().toExternalForm() + 
            RESOURCE_CLUSTERS + "/" + id + "/" + 
            RESOURCE_COMMENTS;
    servletResponse.sendRedirect(requestURL);
}

これが私のweb.xml設定です:

 <init-param>
   <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
   <param-value>com.sun.jersey.api.container.filter.PostReplaceFilter;com.sun.jersey.api.container.filter.LoggingFilter</param-value>
 </init-param>

 <init-param>
   <param-name>com.sun.jersey.api.container.filter.PostReplaceFilterConfig</param-name>
   <param-value>QUERY</param-value>
 </init-param>

私も試しました:

<init-param>
   <param-name>com.sun.jersey.api.container.filter.PostReplaceFilterConfig</param-name>
   <param-value>HEADER,QUERY</param-value>
 </init-param>

そこで何がうまくいかなかったのかはわかりませんが、リクエストはサーバー側でPUTではなくPOSTとして表示されました。重要なことを見逃した場合はお知らせください。

みんなありがとう、

4

1 に答える 1

3

フォームパラメータではなく、クエリパラメータでメソッド名を渡す必要があります。つまり、フォームに「_method」という名前の非表示の入力を追加する代わりに、フォームのアクションURIに「_method」クエリパラメータを追加します。つまり、アクションURIは次のようになります。http://localhost:3030/booklet/clusters/4eec2b6c0364ddde9ad0a82a/comments/COMM5372363818493721528?_method=PUT

于 2011-12-17T16:33:37.500 に答える