一个简单的 curl 命令会导致这种荒谬



在我的带有Spring Data REST和Spring Security的Spring Boot 1.5.12应用程序中,当我通过curl发出DELETE时,一个微不足道的删除映射行为异常:

curl -u 'admin:password' -X DELETE http://localhost:8080/api/shoes/20

服务器出现故障,并出现 Spring Data REST 异常:

ResourceNotFoundException: Resource not found!

当它尝试解析荒谬的 URL 时:

/api/shoes/api/shoes/20

它看起来像是/api/shoes(资源(和/api/shoes/20(要删除的项目(的组合。当然,这个网址不存在...但是这个网址从何而来?端点是微不足道的(龙目岛(:

@RepositoryRestController
@AllArgsConstructor
@Slf4j
public class ShoeRepositoryRestController {
@DeleteMapping("/shoes/{id}")
public void delete(@PathVariable("id") Long shoeId) {
log.error("handle delete");
}
}

在日志中打印错误消息,后跟ResourceNotFoundException.存储库同样是通用的:

@RepositoryRestResource(collectionResourceRel = "shoes", path = "shoes")
public interface ShoeRepository extends PagingAndSortingRepository<Shoe, Long> {
// a set of query methods...
}

并且WebSecurity配置授权删除(显然(:

.antMatchers(HttpMethod.DELETE, "/api/shoes/**").hasRole("MANAGER")

也许 Spring Security 在明显成功处理后试图对提交的 URL (/api/shoes/20( 做一些事情,并且不知何故处理不当。删除处理程序后没有重定向。

任何想法可能会出错?

呃!添加响应实体返回:

@DeleteMapping("/shoes/{id}")
public ResponseEntity<?> delete(@PathVariable("id") Long shoeId) {
log.error("handle delete");
return ResponseEntity.ok().build();
}

应该更好地处理这个编程错误...

最新更新