Spring Boot上H2数据库的HTTP删除

时间:2019-09-19 08:48:45

标签: java spring-boot h2 http-delete

我正在学习Spring Boot,刚刚开始看到H2-Database。我设法发送了HTTP GET请求以在数据库中插入新行,但是无法删除它。

这是我插入新行的方式:

@GetMapping("/addAlien")
public String addAlien(Alien alien) {
    rep.save(alien);
    return "home.jsp";
}   

这是我用来发送GET请求的JSP代码:

<form action="addAlien">
    <input type="text" name="id"><br>
    <input type="text" name="name"><br>
    <input type="text" name="points"><br>
    <input type="submit"><br>
</form>

这是我用来填充H2-Database的SQL文件

insert into alien values (101, 'Bilu', 100)
insert into alien values (102, 'Vargínia', 100)
insert into alien values (103, 'Meeseek', 100)
insert into alien values (104, 'Jack', 100)
insert into alien values (105, 'MrPopButthole', 100)

我有另一种表单,就像我曾经用来发送GET请求的表单一样,只是提交了“ / deleteAlien”。提交会激活下面的代码,尽管不起作用:

        @DeleteMapping("/deleteAlien")
        public int deleteAlien(@RequestParam int id) {
            rep.deleteById(id);
            ModelAndView mv = new ModelAndView("showAlien.jsp");
            Alien alien = rep.findById(id).orElse(null);            
            mv.addObject(alien);
            return id;
        }

提交后,我在这里收到此错误:

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Thu Sep 19 06:12:27 BRT 2019
There was an unexpected error (type=Method Not Allowed, status=405).
Request method 'GET' not supported
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'GET' not supported...

我想做的是通过表单指定“ int id”,然后删除具有相同id的行。

解决方案:我设法使用Postman发送正确的HTTP请求来解决该问题。它可以工作,但是如果有人指导我使用jsp.file和表单来完成它,我将不胜感激。

这是有效的代码:

@DeleteMapping("/alien/{id}")
    public String deleteAlien(@PathVariable("id") int id) {
        Alien a = rep.getOne(id);

        rep.delete(a);

        return "deleted";
    }

我只需要打开Postman并将其配置为使用“ localhost:8080 / alien / id”发送DELETE。

3 个答案:

答案 0 :(得分:1)

您正在发送HTTP GET请求删除该项目,而您的控制器说映射是DELETE,因此您需要将HTTP请求更改为DELETE而不是{ {1}}

答案 1 :(得分:1)

默认的HTTP方法是GET,因此您正在请求使用GET HTTP方法的服务器

使用GET HTTP方法进行请求必须使用DELETE HTTP方法进行请求

这样做

创建另一个具有表单的jsp文件,以删除该jsp文件中的条目,并使用method =“ DELETE”和action =“ deleteAlien”的表单标记

<form action="deleteAlien" method="DELETE">

[input tags]

</form>

答案 2 :(得分:0)

在@DeleteMapping之前的代码上是否有一个“`”?

`@DeleteMapping(“ / deleteAlien”)

选中herehere