【问题标题】:Spring: Error 400 with @RequestBody and JSONSpring:@RequestBody 和 JSON 的错误 400
【发布时间】:2020-12-08 19:04:08
【问题描述】:

我有以下部分代码。当我发送 HTTP 请求时,我收到与 carCoordinates 字段相关的错误 400(如果我删除它,一切都很好)。它应该是一个双重列表。

此外,当我将名称 carCoordinates 更改为 carcoordinates 而不更改 getter 名称时,请求得到了很好的接收,但我无法获取数据,因为 getter 未与对象链接(null)。如果我将 getter 名称更改为 getCarcoordinates 以匹配该字段,则它不再起作用。 任何想法为什么它不起作用?

CarEvent.java:

Public class CarEvent {
    @JsonProperty("carCoordinates")
    protected List carCoordinates;
    ...
    public void setCarCoordinates(Coordinate c) {
        ...
    }
   
    public List getCarCoordinates() {
        return CarCoordinates;
    }
}

发送的 JSON 是:

{
  "id": [006001556, 631016236, 125899724],
  "speed": "0",
  "carCoordinates": [56.477369, 26.64477, 56.466177, 26.651258, 80.545048, 50.614582],
  "num": "5"
}

请求的服务器类是:

@RequestMapping(method = RequestMethod.POST, value = "/car-action", produces = "application/json;charset=UTF-8")
@ResponseBody
public String CarAction(@RequestBody CarEvent requestBody, @RequestHeader HttpHeaders httpHeaders) {
  ...
}

【问题讨论】:

    标签: java json spring spring-mvc


    【解决方案1】:

    问题可能是您的设置方法。您的字段类型为List,但setter 接受Coordinate 的对象。根据您的 json 请求,我认为应该是:

    public void setCarCoordinates(List c) {
       this.carCoordinates = c;
    }
    

    【讨论】:

    • 太棒了,它现在可以工作了!我不知道 setter 方法签名对映射很重要。非常感谢!
    • 太棒了。是的,这很重要,杰克逊在内部使用带有反射的 setter 方法来设置字段。
    【解决方案2】:

    你的CarEvent
    具有错误参数的 setter 方法。
    要么创建一个类 Coordinate 并扩展到 List 要么 更新如下:

    public void setCarCoordinates(List cordinates) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 2013-03-04
      • 1970-01-01
      • 2017-08-12
      • 2014-04-01
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多