SpringBoot的PUT和Delete请求

在Form表单中,只支持get和post方式,而为了实现put方式,我们可以通过如下三个步骤实现
1)SpringMVC中配置HiddenHttpMethodFilter
2)页面创建一个post表单
3)创建一个input项,name="_method",值就是指定的请求方式
其中在HiddenHttpMethodFilter类中
在这里插入图片描述
获取"_method"的值,得到新的请求方式。
在这里插入图片描述

<input type="hidden" name="_method" value="put" th:if="${employee!=null}"/>

其中th标签是thymeleaf模板,表示只有当employee不为空时才生效,而value中的put不区分大小写。
当时在新版本的SpringBoot中,这个put请求不发生作用。原因是因为springboot自动配置,帮我们省略了第一步的配置,上面代码方法就是为了实现自动配置,但是因为注解@ConditionalOnProperty限制了自动配置,默认false不开启配置,所以页面的put提交无法使用。 解决办法: properties配置文件中配置,使之开启自动配置: spring.mvc.hiddenmethod.filter.enabled=true

此外,DELETE请求也可以同样这样设置。

<form th:action="@{/emp/}+${emp.id}" method="post">
	<input type="hidden" name="_method" value="delete"/>
	<button type="submit" class="btn btn-sm btn-danger" > 删除</button>
</form>
<think>好的,我现在需要解决用户在Spring Boot应用中配置CORS以允许PUT请求跨域的问题。首先,我得回顾一下用户提供的引用内容,看看里面有哪些有用的信息。 用户提到了几个引用,其中引用[4]详细说明了两种配置方法:使用@CrossOrigin注解全局配置。引用[5]提到服务器端的CORS配置需要明确允许特定源,这可能涉及到预检请求的处理,而PUT方法属于可能需要预检的HTTP方法。另外,引用[2]指出浏览器会发送OPTIONS预请求,所以配置中必须包含对OPTIONS方法的支持。 接下来,我需要考虑PUT请求的特殊性。根据CORS规范,非简单请求(如PUTDELETE)会触发预检请求,即OPTIONS方法。因此,配置中必须允许OPTIONS方法,并且相应的头部信息需要正确设置。 用户的问题是如何配置允许PUT请求,所以需要确保在配置中明确允许PUT方法。这可能涉及到在@CrossOrigin注解中添加methods属性,或者在全局配置中设置allowedMethods为包括PUT的值,比如使用Spring的HttpMethod.PUT。 然后,根据引用[4]中的例子,使用@CrossOrigin注解时,可以指定originsmethods。例如,在控制器的方法上添加@CrossOrigin(origins = "http://example.com", methods = RequestMethod.PUT)。不过,如果应用中有多个PUT接口,逐个注解可能不太方便,这时候全局配置会更高效。 全局配置方面,引用[4][5]提到了使用WebMvcConfigurer的addCorsMappings方法。在这里,需要创建一个配置类,重写addCorsMappings方法,设置allowedOrigins、allowedMethods(包括PUTOPTIONS),以及allowedHeaders等。这样所有的接口都会应用这个配置,无需在每个控制器上单独添加注解。 同时,要注意引用[5]提到的预检请求需要服务器正确响应,所以必须允许OPTIONS方法,并且暴露必要的头部信息,比如通过exposedHeaders设置。此外,如果项目集成了Spring Security,还需要确保Security配置不会覆盖CORS设置,可能需要额外配置,如引用[2][5]提到的结合Spring Security的情况。 最后,测试配置是否生效,可以通过发送PUT请求并检查响应头中的Access-Control-Allow-Origin、Access-Control-Allow-Methods等字段是否正确包含所需的值。如果遇到问题,可能需要检查配置是否有拼写错误,或者是否有其他安全配置干扰了CORS的设置。</think>在Spring Boot中配置CORS以允许PUT请求跨域,可以通过以下两种方法实现: --- ### 方法1:使用全局配置(推荐) 通过实现`WebMvcConfigurer`接口,统一配置跨域策略: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://example.com") // 允许的域名 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 必须包含PUTOPTIONS .allowedHeaders("*") .allowCredentials(true) .maxAge(3600); // 预检请求缓存时间 } } ``` **关键点:** - `allowedMethods`必须明确包含`PUT``OPTIONS`(PUT请求会触发OPTIONS预检)[^2][^5] - `allowedOrigins`需指定具体域名或使用`"*"`(慎用)[^3] --- ### 方法2:使用@CrossOrigin注解 在Controller类或方法上添加注解: ```java @CrossOrigin( origins = "http://example.com", methods = {RequestMethod.PUT, RequestMethod.OPTIONS}, allowedHeaders = "*" ) @RestController public class MyController { @PutMapping("/data") public ResponseEntity<?> updateData() { return ResponseEntity.ok("PUT请求成功"); } } ``` --- ### 补充说明 1. **与Spring Security集成时** 需确保Security配置不拦截OPTIONS请求,可添加: ```java http.cors().and().csrf().disable() .authorizeRequests() .requestMatchers(HttpMethod.OPTIONS).permitAll(); ``` 2. **验证配置是否生效** 检查响应头是否包含: ``` Access-Control-Allow-Methods: PUT, OPTIONS Access-Control-Allow-Origin: http://example.com ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值