【问题标题】:Spring JSON databinding of nested objects doesn't work嵌套对象的 Spring JSON 数据绑定不起作用
【发布时间】:2012-08-20 15:17:55
【问题描述】:

我有以下 Person 类,其中包含另一个 Car

public class Person {
    private String name
    private Car car;        
    ... getter and setters
}

public class Car {
    private String manufacturer;
    ... getter and setters
}

在 Javascript 中,我执行以下操作:

person = new Object();
person.name = "Bob";

person.car = new Object();

car = person.car;

car.manufacturer = "Mercedes";

$.ajax({
    url: 'someurl.com',
    type: 'POST',
    data: person,
    dataType: 'json',
    ...
    complete: function() {
        ...
    }
});

使用自动绑定功能时出现以下错误:

功能:

public @ResponseBody Car validateCar( Car car, HttpServletRequest servletRequest){
        ...
}

错误:

org.springframework.beans.InvalidPropertyException: Invalid property 'car[manufacturer]' of bean class [com.example.Person]: Property referenced in indexed property path 'car[manufacturer]' is neither an array nor a List nor a Map; returned value was []

我必须做些什么才能使映射工作?

顺便说一句:我的 POST 数据如下所示:

name: Bob
car[manufacturer]: Mercedes

字符串化为 JSON,它看起来如下(我测试过,但我没有对其进行字符串化)

{"name":"Bob",
 "car": {
  "manufacturer":"Mercedes"
 }
}

【问题讨论】:

  • 你能显示你的 POST 数据的 JSON 格式吗?
  • 我已经在下面添加了。

标签: java json spring data-binding


【解决方案1】:

您似乎传入了一个 Car 哈希并试图将其自动绑定到一个 Person 对象。为此,您的哈希需要看起来像 person[car[manufacture]]]。尝试在 javascript 中传入您的人员对象,然后将汽车对象从自动绑定的人员对象中拉出。

【讨论】:

  • 感谢您指出。我只是在我的例子中犯了这个错误。我现在已经更新了。在我的真实代码中,问题仍然存在。
【解决方案2】:

我认为您的汽车上缺少@RequestBody:

public @ResponseBody Car validateCar( @RequestBody Car car, HttpServletRequest servletRequest)

【讨论】:

  • 在没有嵌套 car 类的 person 类之前。没有@RequestBody,它工作得很好。如果我现在使用它,我会得到 415:不支持的媒体类型。
  • 好的,好的,这更多是因为 Accept 标头不存在。如果没有 @RequestBody 注释,我不确定它是如何工作的!您能否确认您的应用程序上下文中有<mvc:annotation-driven/> 注释。
  • 您可能还需要在发布前对数据进行字符串化 - stackoverflow.com/questions/191881/…
  • 对不起,我都试过了。 'mvc-annotation-driven' 搞乱了整个项目并且 stringify 导致 '415 unsupported media' 类型错误。谢谢你的帮助。我认为我需要在我的项目中进行更大的重构。
猜你喜欢
  • 2013-12-28
  • 2021-11-25
  • 1970-01-01
  • 2014-05-08
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多