Rumah  >  Artikel  >  Java  >  Bagaimana untuk menyelesaikan masalah bahawa permintaan PUT SpringBoot2 tidak dapat menerima parameter

Bagaimana untuk menyelesaikan masalah bahawa permintaan PUT SpringBoot2 tidak dapat menerima parameter

WBOY
WBOYke hadapan
2023-05-20 20:38:431611semak imbas

HiddenHttpMethodFilter

Bagaimana untuk menyelesaikan masalah bahawa permintaan PUT SpringBoot2 tidak dapat menerima parameter

Borang borang dalam html hanya menyokong permintaan GET dan POST, tetapi kaedah seperti DELETE dan PUT tidak disokong ini Permintaan ditukar kepada kaedah http standard, membenarkan permintaan GET, POST, PUT dan DELETE disokong.

    @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;
    }

Tetapkan kaedah untuk Siarkan dalam bentuk borang halaman, dan tambah medan tersembunyi seperti berikut:

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

Lihat kod sumber 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);  
        }  
}

Seperti yang boleh dilihat daripada kod sumber, tapis Hanya kaedah Pos ditapis, dan medan tersembunyi dengan nama parameter _method perlu ditambah Anda juga boleh menetapkan nama parameter lain Sebagai contoh, jika anda ingin menetapkannya kepada _method_, anda boleh tetapkan parameter permulaan dalam kelas konfigurasi HiddenHttpMethodFilter: put (methodParam, "_method_")

HttpPutFormContentFilter

Bagaimana untuk menyelesaikan masalah bahawa permintaan PUT SpringBoot2 tidak dapat menerima parameter

Dari HiddenHttpMethodFilter, kita tahu kaedah itu, borang dalam html hanya boleh dipos atau dapatkan. Kita boleh mendapatkan borang put melalui pasangan nilai kunci Parameter, dan terdapat cara lain untuk mendapatkan pasangan nilai kunci parameter bagi borang put dalam Spring3, iaitu menggunakan. penapis 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;
    }

Fungsi penapis HttpPutFormContentFilter adalah untuk mendapatkan nilai borang letak dan hantar ke kaedah yang ditanda RequestMethod.put dalam Pengawal.

Tidak seperti HiddenHttpMethodFilter, tidak perlu menambah medan tersembunyi dengan nama parameter _method dalam borang, dan kaedah itu tidak perlu dipos, ia boleh ditulis terus sebagai meletakkan, tetapi penapis ini hanya boleh terima nilai enctype sebagai borang application/x -www-form-urlencoded, iaitu, apabila menggunakan penapis ini, kod borang borang mestilah seperti berikut:

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

Selain itu , selepas ujian, data json juga ok, enctype=”application/json”Ia juga ok

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah bahawa permintaan PUT SpringBoot2 tidak dapat menerima parameter. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam