Spring @RequestBody json 400错误,如何更改@RequestyBody参数?

时间:2016-01-28 00:13:19

标签: java json spring

嗨〜我使用了springframework和jackson库来映射json数据。 当客户端向服务器发送json数据时,例如

"files": [
 {
        "fileLoctn": "%INSTALL_PATH%\\beth_birthday.jpeg",
        "fileSize": "10",
        "fileVer": "0.1"
    },
 {
        "fileLoctn": "%INSTALL_PATH%\\beth_graduate.jpeg",
        "fileSize": "10",
        "fileVer": "0.1"
    }
]}

我像这样映射它。它奏效了。

@RequestBody Map<String, List<InfoVO>> listInfoVo 

但是当我改变了诸如

之类的json数据
   {
      "useId" : "Beth",
      "files": [
     {
            "fileLoctn": "%INSTALL_PATH%\\beth_birthday.jpeg",
            "fileSize": "10",
            "fileVer": "0.1"
        },
     {
            "fileLoctn": "%INSTALL_PATH%\\beth_graduate.jpeg",
            "fileSize": "10",
            "fileVer": "0.1"
        }
    ]},
    {
      "useId" : "Tom",
      "files": [
     {
            "fileLoctn": "%INSTALL_PATH%\\Tom_birthday.jpeg",
            "fileSize": "10",
            "fileVer": "0.1"
        },
     {
            "fileLoctn": "%INSTALL_PATH%\\Tom_graduate.jpeg",
            "fileSize": "10",
            "fileVer": "0.1"
        }
    ]}

我像这样映射了@Requestbody。

@RequestBody List<Map<Map<String,String>, Map<String, List<InfoVO>>>> listInfoVo

但它不起作用。如何更改@RequestBody参数类型? 我不知道。如何更改参数。

InfoVo包含带有get / set方法的fileLoctn,fileSize,fileVer,UserId。

4 个答案:

答案 0 :(得分:1)

我建议你定义一个类来映射它...数据结构似乎不那么清楚......

public class PayloadDTO {
  private String userId;
  private List<FileDesc> files;
  // getters and setters
}


public calss FileDescDTO {
  private String fileLoctn;
  private String fileSize;
  private String fileVer;
  // getters and setters
}

然后你就可以简单了:

@RequestBody List<PayloadDTO> listInfoVo

答案 1 :(得分:1)

这样做的一种方法是定义一个像这样的新占位符类。

public class ClientRequest {
    private String userId;
    private List<InfoVO> files;
}

和替换控制器方法如下。

@RequestBody List<ClientRequest> listInfoVo

答案 2 :(得分:0)

确保您的参数是有效的JSON格式。

List<String> : ["a", "b", "c" ...]

Map<String, Object> : 
    {
        "a":{"key1":"value1","key2":"value2", ...},
        "b":{"key1":"value1","key2":"value2", ...}
    }

List<Map<String, Object>> : 
    [
        {"a":{"key1":"value1","key2":"value2", ...}}, 
        {"a":{"key1":"value1","key2":"value2", ...}}
    ]

答案 3 :(得分:0)

您可以使用此网站将json转换为pojo&#39; s http://www.jsonschema2pojo.org/