在请求者上获取整数

时间:2018-03-09 11:29:52

标签: java spring

无法在数据库中获取要删除的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 token\n at [Source: java.io.PushbackInputStream@1b77938; line: 1, column

2 个答案:

答案 0 :(得分:2)

也许您正试图从Postman客户端或类似的对象发送带有JSON文本的请求,

{
 "id_search":2
}

Jackson不能对它进行反序列化,因为它不是Integer(似乎是,但不是)。来自java.lang Integer的Integer对象稍微复杂一点。

要使您的邮递员请求生效,只需放置(不带花括号{ }):

2

答案 1 :(得分:1)

这句话错了

@RequestBody Integer id_search

这意味着Spring期望一个Integer类的主体。但是你传递的是身体与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. 如果你想以body身份发送,那么你应该创建一个与你发送的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();
    }