springboot中delete请求方式的实现

本文深入探讨了在SpringBoot框架中处理DELETE请求的方法,包括如何在前后端进行正确的请求与响应处理,以及在非SpringBoot环境下如何通过特殊配置实现相同功能。

前端

 $.ajax({
            type: 'DELETE',
            url: '/user/'+userId,
            ...
       })

后端

 @DeleteMapping("{userId}")
 public ResponseEntity<Void> deleteUser( @PathVariable String userId){}

此方法适合在springboot中,此方法对PUT请求亦可.

1.SpringBoot已经默认引入了HiddenHttpMethodFilter,可在SpringBoot启动日志里看到该Filter的启动信息。

2.Delete方式有Entity Body,但是该方法传递Entity Body没有明确定义的语义,所以有些服务器实现会丢弃/忽略DELETE请求的entity body,或者拒绝该请求。所以Delete请求中,不要把数据放到Entity Body中。

3.非常坑的一点是,GET没有Entity Body,在ajax中写入data来传参,会直接把参数拼接到url后面。DELETE方式却不可以。所以使用DELETE方式请求时,要手动将参数拼接到url中,而非写到data中。

若为非springboot则用其他的方式:

SpringMVC中对PUT DELETE方式不支持,要加入HiddenHttpMethodFilter,在前端将PUT DELETE请求改为type:“POST”,data:{_method:"DELETE}才可以接收,此处不详细讲述。

### Spring Boot 中四种 HTTP 请求方法使用示例 #### GET 请求 通过 `RestTemplate` 发送 GET 请求可以获取资源数据。下面展示了一个简单的例子: ```java @Autowired private RestTemplate restTemplate; public String getUserById(String userId) { String url = "http://example.com/users/{id}"; Map<String, String> params = new HashMap<>(); params.put("id", userId); return restTemplate.getForObject(url, String.class, params); } ``` 此代码片段展示了如何利用 `RestTemplate` 的 `getForObject()` 方法发起有路径参数的 GET 请求[^1]。 对于更复杂的场景,比如需要携查询参数时,则可以通过构建 URI 来实现: ```java UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(baseUrl) .queryParam("paramName", paramValue); ResponseEntity<User> response = restTemplate.exchange( builder.build().toUri(), HttpMethod.GET, null, User.class); ``` 这段代码说明了当有额外查询条件时应该如何构造 URL 并发出 GET 请求。 #### POST 请求 要向服务器提交新实体或更新现有实体的数据,通常会采用 POST 方式。这里给出一个创建用户的实例: ```java User newUser = new User(); newUser.setName("John Doe"); // 设置其他属性... HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<User> request = new HttpEntity<>(newUser, headers); String result = restTemplate.postForObject(userCreationEndpoint, request, String.class); ``` 上述代码段解释了怎样设置请求头并传递 JSON 格式的对象作为请求体来完成一次 POST 操作。 如果希望接收返回的对象而不是字符串形式的结果,还可以改用如下方式: ```java ResponseEntity<User> response = restTemplate.postForEntity(createUserURL, userRequest, User.class); return response.getBody(); ``` 这表明可以根据实际需求选择不同的 API 来适应具体的应用逻辑。 #### PUT 请求 PUT 请求常用来完全替换指定位置上的某个已有资源。以下是修改用户信息的例子: ```java User updatedUser = new User(); updatedUser.setId(1L); updatedUser.setName("Jane Smith"); restTemplate.put(updateUserURL, updatedUser); ``` 此处演示的是最简单的情况——仅需提供待更改的内容即可;而有时可能还需要自定义 HTTP 头部字段等附加配置。 另外一种情况是,当你想要确保只有在特定条件下才允许覆盖目标资源时(即有条件地执行 PUT),则可考虑使用 `exchange()` 或者 `execute()` 方法来自定义行为。 #### DELETE 请求 最后来看下删除操作对应的 DELETE 请求。假设有一个服务端点 `/users/{userId}` 可供我们调用以移除某位用户的信息: ```java Map<String, ?> vars = Collections.singletonMap("userId", 123L); restTemplate.delete("/users/{userId}", vars); ``` 该语句实现了基于模板化 URL 和变量映射的方式来进行安全可靠的删除动作。 除了以上提到的方法之外,在某些情况下也可以借助于 `exchange()` 函数获得更大的灵活性,例如添加认证信息或者其他非标准头部项等等。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值