Spring MVC中的对象列表@RequestBody产生“语法不正确的请求”

时间:2014-08-25 11:48:56

标签: java rest spring-mvc put

我尝试使用Spring MVC + Swagger Annotations通过REST服务更新对象。 方法是这样的:

@ApiOperation(value = "Modifies the entity")
@RequestMapping(value = "/entity", method = RequestMethod.PUT, headers = "Accept=application/json")
@APIMonitor
@ResponseBody
public PubTagger saveEntityDetails(
        HttpServletResponse response,
        ModelMap model,
        @RequestBody final EntityClass entityInfo
        )
        throws Exception {
         ...
        }

实体定义是:

{
  "id": "long",  
  "description": "string",
  "name": "string",
  "properties": [
    {
      "name": "string",
      "value": "string"
    }
  ]
}

它给了我一个错误

  

客户端发送的请求在语法上是不正确的()

但只有当我填充Properties字段内的对象时才会发生这种情况。如果我把它留空,那就成功了。所以我在Spring MVC中推断出错误,列表中有嵌套对象。

这里有什么我想念的吗?我是否必须在模型中指定任何内容才能使其正常工作?

编辑:发布实体类

public class Entity {
    private Long id;
    private String name;
    private String description;
    private List<Property> properties = new ArrayList<>();

    public void setId(final Long id) {
        this.id = id;
    }

    public Entity() {
        super();
    }

    public String getName() {
        return name;
    }
    public void setName(final String name) {
        this.name = name;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(final String description) {
        this.description = description;
    }

    public List<Property> getProperties() {
        return properties;
    }

    public void setProperties(List<Property> properties) {
        this.properties = properties;
    }

}

1 个答案:

答案 0 :(得分:1)

谢谢,我发现了错误。

类Property只有参数化构造函数,没有默认构造函数,无法将JSON requestBody编组到对象中。