我正在开发必须接收多个信息的 REST 服务。在这种情况下,两个对象和一个属性。
这是我测试 POST 请求的 javascript
var user = {
username: "admin",
password: "admin"
};
var userToSubscribe = {
username: "newuser",
password: "newpassword",
email: "user@1and1.es"
};
var openid = "myopenid";
$.ajax({
url: '/myportal/rest/subscribeUser.json',
type: 'POST',
dataType: 'json',
contentType: 'application/json',
mimeType: 'application/json',
data: JSON.stringify({ user: user, userToSubscribe: userToSubscribe, openid: openid})
});
POST 请求:
JSON
openid
"myopenid"
user
Object { username="admin", password="admin"}
userToSubscribe
Object { username="newuser", password="newpassword", email="user@1and1.es"}
Source
{"user":{"username":"admin","password":"admin"},"userToSubscribe":{"username":"newuser","password":"newpassword","email":"user@1and1.es"},"openid":"myopenid"}
以及处理 POST 的 Controller :
@RequestMapping(method=RequestMethod.POST, value="/subscribeUser.json")
public @ResponseBody Message subscribeUser(@RequestBody("user") User user, @RequestBody("userToSubscribe") User userToSubscribe, @RequestParam String openid){
...
}
错误是
POST subscribeUser.json 400 错误请求 localhost:8080 990 B [::1]:8080
我做错了什么?
谢谢
最佳答案
请求正文将包含整个 JSON 内容。所以当你想映射 JSON 时,你只使用一个 RequestBody 注释参数。你将不得不做这样的事情:
public @ResponseBody Message subscribeUser(@RequestBody String str)
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(str);
然后使用映射器的 convertValue 方法从字符串中获取不同的对象。
JsonNode node = mapper.readTree(str);
User theUser = mapper.convertValue(node.get("user"), User.class);
其他对象也是如此
关于java - 通过 POST 和 SPRING-MVC 发送多个对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19654120/