在请求正文上获取整数



我需要获取要在数据库上删除的id,但我无法以这种方式获取id参数

@RequestMapping(value = {"/delete/search/","/delete/search"}, method = RequestMethod.DELETE)
    @ResponseBody
    public Integer deleteUser(@RequestBody Integer id_search) {
        return id_search;
    }

我收到此错误消息

"message": "JSON parse error: Can not deserialize instance of java.lang.Integer out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT tokenn at [Source: java.io.PushbackInputStream@1b77938; line: 1, column

这种说法是错误的

@RequestBody Integer id_search

这意味着Spring期待一个Integer类的机构。但是您作为主体传递的内容与整数类不匹配。

您有很多选择来解决此问题。

  1. 删除@RequestBody,只需声明为

    public Integer deleteUser(Integer id_search) {...}
    

    有了这个,你需要调用这个端点作为

    http://localhost:8080/seviceRS/delete/search?id_search=2
    
  2. 你可以像这样PathVariable传递它

    http://localhost:8080/seviceRS/delete/search/2
    

    为此,请像这样更改控制器方法

    @RequestMapping(value = 
    {"/delete/search/{id_search}"}, method = 
                                           RequestMethod.DELETE)
      @ResponseBody
      public Integer deleteUser(Integer id_search) {...}
    
  3. 如果要作为正文发送,则应创建一个与要发送的 json 匹配的类。

    例如。创建一个类,例如

     class Demo {
      private int id_search;
      //Getters & Setters
     }
    

    使用这种方法,您的控制器方法如下所示

    @RequestMapping(value = {"/delete/search/}, method = 
                      RequestMethod.DELETE)
    @ResponseBody
    public Integer deleteUser(Demo demo) {
         demo.getId_Search();
    }
    

也许您正在尝试从 Postman 客户端发送正文中包含 JSON 文本的请求或类似的东西:

{
 "id_search":2
}

这不能由杰克逊反序列化,因为这不是整数(似乎是,但不是(。来自java.lang Integer的Integer对象稍微复杂一些。

要使您的邮递员请求起作用,只需输入(不带大括号{ }(:

2

最新更新