您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

AngularJS:使用$ http.post传递复杂的json数据

AngularJS:使用$ http.post传递复杂的json数据

在努力找到这个问题的错误之后,我终于找到了解决方案。我以为我会分享如何调试和解决此问题,以防别人遇到与我相似的情况。

在尝试了将数据以一定角度发送到服务器并不断出现相同的HTTP 400错误后,我决定像这样在我的spring mvc控制器中将json作为字符串发送并接受json作为字符串。

角度服务方法

this.addOrder = function(new_order) {
    return $http.post(base + "/add", angular.toJson(new_order));
};

弹簧控制器

@RequestMapping(value="/add", method=RequestMethod.POST, consumes="application/json")
public void addOrder(@RequestBody String json) {

}

从这里,我只是简单地接收传入的json,并使用Jackson ObjectMapper这样将json字符串转换为我的POJO。

将json字符串映射到pojo

@RequestMapping(value="/add", method=RequestMethod.POST, consumes="application/json")
public void addOrder(@RequestBody String json) {

    ObjectMapper mapper = new ObjectMapper();

    try {

        CustomerOrder order = mapper.readValue(json, CustomerOrder.class);
        System.out.println(order.getCustomer().getFirstName() + " " + order.getCustomer().getLastName());

    } catch (JsonGenerationException e) {

        e.printStackTrace();

    } catch (JsonMappingException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }
}

完成此步骤并运行我的代码后,当尝试将Items json绑定到我的Order类中的List时,我的Items类中的字段上将收到UnrecognizedPropertyException。在json方面,这只是一个简单的拼写错误,我完全错过了它。更正此错误后,杰克逊正确地映射了所有内容,并且我再也未收到此HTTP 400错误该请求在语法上不正确。

要注意的另一件事是,如果使用JSON.stringify将对象作为有角度的字符串传递,则在JSON对象的hashKey字段上可能会遇到相同的异常。hashKey由angular使用,用于监视更改。我相信您可以使用jackson批注来忽略未知字段,或者可以简单地使用angular.toJson代替,这将为您删除所有hasKey / values,这正是我所做的。

其他 2022/1/1 18:13:35 有741人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶