1

假设我已将 JSON 发布到服务器,如下所示:

{
    warFile: {name: "test1", dependencies: [test0, test2]},
    param: {build: true, test: true}
}

我有 3 个课程如下:

public class WarFile{
   private String name:
   private String[] dependencies;
   public void setName(){...};
   public String getName(){...};
   public void setDependencies(){...};
   public String[] getDependencies(){...};
}

public class Param{
   private boolean build;
   private boolean test;
   public void setBuild(){...};
   public boolean isBuild(){...};
   public void setTest(){...};
   public boolean isTest(){...};
}

public class Command{
    private WarFile warFile;
    private Param param;
    private void setWarFile(){...};
    private WarFile getWarFile(){...};
    private void setParam(){...};
    private Param getParam(){...};
}

控制器如下:

@RequestMapping(value = "/test.ajax", method = RequestMethod.POST)
public @ResponseBody
BuildResult buildWar(@RequestBody Command cmd) {
    return logic.build(cmd.getWarFile(), cmd.getParam());
}

由于warFileand paramin Command 不是原始类型,我总是收到以下错误:

The request sent by the client was syntactically incorrect.

如果 Command 中的所有属性都是原始类型,我确信没有任何问题。但是这个错误是怎么发生的呢?我的意思是,对象很简单,无需为它们编写自定义反序列化器。

4

2 回答 2

0

您的请求映射是 /test.ajax 还是 /test 在您的 html 中<form>

您是否添加了杰克逊映射器 jar 依赖项?如果是的话,我猜下一个解决方案将是逃避你的报价。这可能对 Spring MVC 有所帮助:客户端发送的请求在语法上不正确

获取 HTTP 状态 400 - 客户端发送的请求在语法上不正确:使用 curl 发布/放置 json 请求

于 2013-10-22T03:21:42.607 回答
0

“发送给客户端的请求在语法上不正确”意味着您发送的请求内容有问题,不一定是您的控制器或 Spring 配置。首先,您的 JSON 无效。Jackson 无法正确地将 JSON 映射到它应该表示的对象。它应该是:

{
    "warFile": {
        "name": "test1",
        "dependencies": ["test0", "test2"]
    },
    "param": {
        "build": true,
        "test": true
    }
}

其次,确保内容类型是 application/json。最后,为什么你的 Command 对象有私有的 getter/setter,而你的 setter 没有字段参数?

于 2013-10-22T03:46:00.067 回答