java - 通过 POST 和 SPRING-MVC 发送多个对象的问题

标签 java json spring spring-mvc

我正在开发必须接收多个信息的 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/

相关文章:

java - for() 函数中的 ":"

javascript - 设置 highchart 中 y 轴的 double 最小值和最大值

json - 将 GeoJSON 文件导入 React-Leaflet

java - 覆盖仅在 Android 中的前 2 个 GPS 点之间画线

json - 使用点表示法访问具有嵌套 JSON 数据的 Jaspersoft Report 字段失败

json - 可以跳过 json 对象表中的第一个属性吗?

java - 使用javascript直接从MYSQL获取所有数据库值

java - 使用 WebClient 时对 POST 请求正文进行单元测试

spring - 卡夫卡消费者崩溃

java - 使用类作为类型参数,该类可能包含也可能不包含其他类型参数