2013-10-22 43 views
1

比方说,我已经发布JSON服务器如下:如何使用spring mvc将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()); 
} 

而且,由于warFileparam in Command不是原始类型,我总是得到以下错误:

The request sent by the client was syntactically incorrect. 

如果Command中的所有属性都是原始类型,我相信没有任何问题。但是这个错误是怎么发生的?我的意思是,这些对象很简单,不需要为它们编写自定义的解串器。

+0

请显示您如何将JSON内容发布到服务器的代码。另外,你有没有在你的classpath上使用Jackson?你使用的是什么版本的Spring? – digitaljoel

+0

邮政部分为其他请求正确工作,并且我进口杰克逊。事情是当我想要反序列化一个复杂的对象时出现错误。如果该对象只包含int,string,list ......的属性,则不会有任何问题。该过程正常工作。 – Howard

回答

0

“发送到客户端的请求是语法不正确”是指有什么问题您发送的请求的内容,不一定是你的控制器或Spring配置。首先,你的JSON无效。杰克逊无法正确地将JSON映射到它应该代表的对象。它应该是:

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

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

+0

当我写这个问题时,私人的getters/sertters是错误的。谢谢你纠正这一点。 – Howard

0

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

您是否添加了jackson mapper jar依赖项?如果是的话,下一个解决方案将逃避你的报价我猜。这可能帮助 Spring MVC : The request sent by the client was syntactically incorrect

Getting HTTP status 400 - The request sent by the client was syntactically incorrect: using curl to post/put json request

+0

我将Jackson添加为依赖项。问题是我只有在命令包含其他对象作为属性时才会出错。如果Command中的属性只是一些基本类型,比如int,boolean,string ...,它可以正常工作。 – Howard

相关问题