ホームページ  >  記事  >  Java  >  SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法

SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法

WBOY
WBOY転載
2023-05-20 20:38:431630ブラウズ

HiddenHttpMethodFilter

SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法

HTML のフォーム フォームは GET リクエストと POST リクエストのみをサポートしますが、DELETE や PUT などのメソッドはサポートされません。リクエストは標準の http メソッドに変換され、GET、POST、PUT、および DELETE リクエストをサポートできるようになります。

    @Bean
    public FilterRegistrationBean<HiddenHttpMethodFilter> testFilterRegistration3() {
        FilterRegistrationBean<HiddenHttpMethodFilter> registration = new FilterRegistrationBean<HiddenHttpMethodFilter>();
        registration.setFilter(new HiddenHttpMethodFilter());//添加过滤器
        registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
        registration.setName("HiddenHttpMethodFilter");//设置优先级
        registration.setOrder(2);//设置优先级
        return registration;
    }

ページのフォームフォームでメソッドをPostに設定し、次のように隠しフィールドを追加します:

<input type="hidden" name="_method" value="put" />

HiddenHttpMethodFilterのソースコードを表示

        String paramValue = request.getParameter(methodParam);  
        if("POST".equals(request.getMethod()) && StringUtils.hasLength(paramValue)) {  
            String method = paramValue.toUpperCase(Locale.ENGLISH);  
            HttpServletRequest wrapper = new HttpMethodRequestWrapper(request, method); 
            filterChain.doFilter(wrapper, response);  
        } else  
        {  
            filterChain.doFilter(request, response);  
        }  
}

ご覧のとおりソース コードから、フィルター Post メソッドのみがフィルターされ、パラメーター名 _method の隠しフィールドを追加する必要があります。他のパラメーター名も設定できます。たとえば、_method_ に設定したい場合は、次のように設定できますHiddenHttpMethodFilter 構成クラスの初期化パラメーター: put (methodParam, "_method_" )

HttpPutFormContentFilter

SpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法

HiddenHttpMethodFilter から、次のメソッド値がHTML のフォームは post または get のみです。Put フォームは HiddenHttpMethodFilter を介して取得できます。パラメータのキーと値のペアであり、Spring3 で Put フォームのパラメータのキーと値のペアを取得する別の方法があります。 HttpPutFormContentFilter フィルター。

    @Bean
    public FilterRegistrationBean<HttpPutFormContentFilter> testFilterRegistration2() {
        FilterRegistrationBean<HttpPutFormContentFilter> registration = new FilterRegistrationBean<HttpPutFormContentFilter>();
        registration.setFilter(new HttpPutFormContentFilter());//添加过滤器
        registration.addUrlPatterns("/*");//设置过滤路径,/*所有路径
        registration.setName("HttpPutFormContentFilter");//设置优先级
        registration.setOrder(2);//设置优先级
        return registration;
    }

HttpPutFormContentFilter フィルターの機能は、put フォームの値を取得し、それをメソッド RequestMethod.put でマークされたコントローラーのメソッドに渡すことです。

HiddenHttpMethodFilter とは異なり、フォームにパラメーター名 _method を持つ隠しフィールドを追加する必要はありません。メソッドは post である必要はなく、put として直接記述することができますが、このフィルターはenctype 値を application/x -www-form-urlencoded フォームとしてのみ受け入れます。つまり、このフィルターを使用する場合、フォーム form のコードは次のようにする必要があります:

<form action="" method="put" enctype="application/x-www-form-urlencoded">  
    ......  
</form>

また、テスト後はjsonデータもOKですenctype=”application/json”これもOKです

以上がSpringBoot2のPUTリクエストでパラメータが受け取れない問題の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。